Software / code / prosody
Comparison
net/server_select.lua @ 2997:6ccaefea80ec
Merge with tip.
| author | Tobias Markmann <tm@ayena.de> |
|---|---|
| date | Fri, 12 Mar 2010 18:41:05 +0100 |
| parent | 2996:b0515ed4d9d7 |
| parent | 2740:2442c54cf9ec |
| child | 2998:36c169ed1576 |
comparison
equal
deleted
inserted
replaced
| 2996:b0515ed4d9d7 | 2997:6ccaefea80ec |
|---|---|
| 428 end | 428 end |
| 429 return noread, nosend | 429 return noread, nosend |
| 430 end | 430 end |
| 431 local _readbuffer = function( ) -- this function reads data | 431 local _readbuffer = function( ) -- this function reads data |
| 432 local buffer, err, part = receive( socket, pattern ) -- receive buffer with "pattern" | 432 local buffer, err, part = receive( socket, pattern ) -- receive buffer with "pattern" |
| 433 if not err or (err == "wantread" or err == "timeout") or string_len(part) > 0 then -- received something | 433 if not err or (err == "wantread" or err == "timeout") or (part and string_len(part) > 0) then -- received something |
| 434 local buffer = buffer or part or "" | 434 local buffer = buffer or part or "" |
| 435 local len = string_len( buffer ) | 435 local len = string_len( buffer ) |
| 436 if len > maxreadlen then | 436 if len > maxreadlen then |
| 437 disconnect( handler, "receive buffer exceeded" ) | 437 disconnect( handler, "receive buffer exceeded" ) |
| 438 handler.close( true ) | 438 handler:close( true ) |
| 439 return false | 439 return false |
| 440 end | 440 end |
| 441 local count = len * STAT_UNIT | 441 local count = len * STAT_UNIT |
| 442 readtraffic = readtraffic + count | 442 readtraffic = readtraffic + count |
| 443 _readtraffic = _readtraffic + count | 443 _readtraffic = _readtraffic + count |
| 446 return dispatch( handler, buffer, err ) | 446 return dispatch( handler, buffer, err ) |
| 447 else -- connections was closed or fatal error | 447 else -- connections was closed or fatal error |
| 448 out_put( "server.lua: client ", tostring(ip), ":", tostring(clientport), " read error: ", tostring(err) ) | 448 out_put( "server.lua: client ", tostring(ip), ":", tostring(clientport), " read error: ", tostring(err) ) |
| 449 fatalerror = true | 449 fatalerror = true |
| 450 disconnect( handler, err ) | 450 disconnect( handler, err ) |
| 451 _ = handler and handler.close( ) | 451 _ = handler and handler:close( ) |
| 452 return false | 452 return false |
| 453 end | 453 end |
| 454 end | 454 end |
| 455 local _sendbuffer = function( ) -- this function sends data | 455 local _sendbuffer = function( ) -- this function sends data |
| 456 local succ, err, byte, buffer, count; | 456 local succ, err, byte, buffer, count; |
| 470 bufferqueuelen = 0 | 470 bufferqueuelen = 0 |
| 471 bufferlen = 0 | 471 bufferlen = 0 |
| 472 _sendlistlen = removesocket( _sendlist, socket, _sendlistlen ) -- delete socket from writelist | 472 _sendlistlen = removesocket( _sendlist, socket, _sendlistlen ) -- delete socket from writelist |
| 473 _ = needtls and handler:starttls(nil, true) | 473 _ = needtls and handler:starttls(nil, true) |
| 474 _writetimes[ handler ] = nil | 474 _writetimes[ handler ] = nil |
| 475 _ = toclose and handler.close( ) | 475 _ = toclose and handler:close( ) |
| 476 return true | 476 return true |
| 477 elseif byte and ( err == "timeout" or err == "wantwrite" ) then -- want write | 477 elseif byte and ( err == "timeout" or err == "wantwrite" ) then -- want write |
| 478 buffer = string_sub( buffer, byte + 1, bufferlen ) -- new buffer | 478 buffer = string_sub( buffer, byte + 1, bufferlen ) -- new buffer |
| 479 bufferqueue[ 1 ] = buffer -- insert new buffer in queue | 479 bufferqueue[ 1 ] = buffer -- insert new buffer in queue |
| 480 bufferqueuelen = 1 | 480 bufferqueuelen = 1 |
| 483 return true | 483 return true |
| 484 else -- connection was closed during sending or fatal error | 484 else -- connection was closed during sending or fatal error |
| 485 out_put( "server.lua: client ", tostring(ip), ":", tostring(clientport), " write error: ", tostring(err) ) | 485 out_put( "server.lua: client ", tostring(ip), ":", tostring(clientport), " write error: ", tostring(err) ) |
| 486 fatalerror = true | 486 fatalerror = true |
| 487 disconnect( handler, err ) | 487 disconnect( handler, err ) |
| 488 _ = handler and handler.close( ) | 488 _ = handler and handler:close( ) |
| 489 return false | 489 return false |
| 490 end | 490 end |
| 491 end | 491 end |
| 492 | 492 |
| 493 -- Set the sslctx | 493 -- Set the sslctx |