Commit 2f6f4367cdd3a9f9095379fabe9a510eecab387a
1 parent
340a3c11
some fixes in socket condition detection
Showing
2 changed files
with
15 additions
and
7 deletions
... | ... | @@ -57,7 +57,8 @@ TR_socketRecv(void * _this, size_t size) |
57 | 57 | |
58 | 58 | if (! remote_data) { |
59 | 59 | switch (errno) { |
60 | - case (EAGAIN|EWOULDBLOCK): | |
60 | + case EAGAIN: | |
61 | + // case EWOULDBLOCK: // is the same value as EAGAIN | |
61 | 62 | TR_delete(remote_data); |
62 | 63 | return TR_emptyRemoteData; |
63 | 64 | |
... | ... | @@ -96,17 +97,25 @@ TR_socketSend(void * _this, TR_RemoteData data) |
96 | 97 | // of the whole application... |
97 | 98 | return -1; |
98 | 99 | |
99 | - case (EAGAIN|EWOULDBLOCK): | |
100 | + case EAGAIN: | |
101 | + //case EWOULDBLOCK: // is the same value as EAGAIN | |
100 | 102 | return FALSE; |
101 | 103 | |
104 | + default: | |
102 | 105 | case ECONNRESET: |
106 | + case EPIPE: | |
103 | 107 | // this is a remote close... |
104 | 108 | return -2; |
105 | - | |
106 | - default: | |
107 | - return -2; | |
108 | 109 | } |
109 | - } | |
110 | + } else if (size == 0) { | |
111 | + /* | |
112 | + * It might happen that a write returns 0. In that case the remote | |
113 | + * end was not ready to accept the data. This might be handled | |
114 | + * differently by the managing code so I return a separate value | |
115 | + * for this. | |
116 | + */ | |
117 | + return -3; | |
118 | + } | |
110 | 119 | |
111 | 120 | return size; |
112 | 121 | } | ... | ... |
Please
register
or
login
to post a comment