Rev 3884 | Rev 4021 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3884 | Rev 4020 | ||
---|---|---|---|
Line 606... | Line 606... | ||
606 | call TCP_output |
606 | call TCP_output |
607 | pop eax |
607 | pop eax |
Line 608... | Line 608... | ||
608 | 608 | ||
609 | .block: |
609 | .block: |
610 | test [eax + SOCKET.options], SO_NONBLOCK |
610 | test [eax + SOCKET.options], SO_NONBLOCK |
Line 611... | Line 611... | ||
611 | jz .loop |
611 | jz .waitforit |
612 | 612 | ||
613 | mov dword[esp+20], EWOULDBLOCK |
613 | mov dword[esp+20], EWOULDBLOCK |
Line -... | Line 614... | ||
- | 614 | mov dword[esp+32], -1 |
|
- | 615 | ret |
|
- | 616 | ||
- | 617 | .waitforit: |
|
- | 618 | push eax |
|
614 | mov dword[esp+32], -1 |
619 | stdcall timer_hs, 300, 0, .wake, eax ; FIXME: make timeout a constant |
615 | ret |
620 | pop eax |
616 | 621 | ||
617 | .loop: |
622 | .loop: |
618 | cmp [eax + TCP_SOCKET.t_state], TCPS_CLOSED |
623 | cmp [eax + SOCKET.errorcode], 0 |
619 | je .fail |
- | |
Line 620... | Line 624... | ||
620 | cmp [eax + TCP_SOCKET.t_state], TCPS_ESTABLISHED |
624 | jne .fail |
621 | je .established |
625 | cmp [eax + TCP_SOCKET.t_state], TCPS_ESTABLISHED |
Line -... | Line 626... | ||
- | 626 | je .established |
|
- | 627 | ||
- | 628 | call SOCKET_block |
|
- | 629 | jmp .loop |
|
- | 630 | ||
- | 631 | .wake: |
|
622 | ja .fail |
632 | mov eax, [esp+4] |
623 | 633 | mov [eax + SOCKET.errorcode], ETIMEDOUT |
|
624 | call SOCKET_block |
634 | call SOCKET_notify.unblock |
625 | jmp .loop |
635 | ret 4 |
626 | 636 |