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,7 +57,8 @@ TR_socketRecv(void * _this, size_t size)
57 57
58 if (! remote_data) { 58 if (! remote_data) {
59 switch (errno) { 59 switch (errno) {
60 - case (EAGAIN|EWOULDBLOCK): 60 + case EAGAIN:
  61 + // case EWOULDBLOCK: // is the same value as EAGAIN
61 TR_delete(remote_data); 62 TR_delete(remote_data);
62 return TR_emptyRemoteData; 63 return TR_emptyRemoteData;
63 64
@@ -96,17 +97,25 @@ TR_socketSend(void * _this, TR_RemoteData data) @@ -96,17 +97,25 @@ TR_socketSend(void * _this, TR_RemoteData data)
96 // of the whole application... 97 // of the whole application...
97 return -1; 98 return -1;
98 99
99 - case (EAGAIN|EWOULDBLOCK): 100 + case EAGAIN:
  101 + //case EWOULDBLOCK: // is the same value as EAGAIN
100 return FALSE; 102 return FALSE;
101 103
  104 + default:
102 case ECONNRESET: 105 case ECONNRESET:
  106 + case EPIPE:
103 // this is a remote close... 107 // this is a remote close...
104 return -2; 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 return size; 120 return size;
112 } 121 }
@@ -54,7 +54,6 @@ TR_socketAccept(TR_TcpSocket this) @@ -54,7 +54,6 @@ TR_socketAccept(TR_TcpSocket this)
54 //fcntl(remote->handle, F_SETFL, flags | O_NONBLOCK); 54 //fcntl(remote->handle, F_SETFL, flags | O_NONBLOCK);
55 55
56 if (-1 == remote->handle) { 56 if (-1 == remote->handle) {
57 - perror("accept");  
58 TR_delete(remote); 57 TR_delete(remote);
59 } else { 58 } else {
60 TR_socketAddrIpStr(remote, remote->host, TR_MAX_HOST); 59 TR_socketAddrIpStr(remote, remote->host, TR_MAX_HOST);
Please register or login to post a comment