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