Commit 2f6f4367cdd3a9f9095379fabe9a510eecab387a

Authored by Georg Hopp
1 parent 340a3c11

some fixes in socket condition detection

... ... @@ -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 }
... ...
... ... @@ -54,7 +54,6 @@ TR_socketAccept(TR_TcpSocket this)
54 54 //fcntl(remote->handle, F_SETFL, flags | O_NONBLOCK);
55 55
56 56 if (-1 == remote->handle) {
57   - perror("accept");
58 57 TR_delete(remote);
59 58 } else {
60 59 TR_socketAddrIpStr(remote, remote->host, TR_MAX_HOST);
... ...
Please register or login to post a comment