aboutsummaryrefslogtreecommitdiff
path: root/src/wsocket.c
diff options
context:
space:
mode:
authorDiego Nehab <diego@tecgraf.puc-rio.br>2004-05-28 07:24:43 +0000
committerDiego Nehab <diego@tecgraf.puc-rio.br>2004-05-28 07:24:43 +0000
commitc98dc991998c724a3f6a1fdd90b5d1d8a80e3af3 (patch)
tree8d8b8aa856d8a3e822121d0915a63b8244f471bb /src/wsocket.c
parent9297b074d53a00e1149250e0bbfa0871dcc5558f (diff)
downloadluasocket-c98dc991998c724a3f6a1fdd90b5d1d8a80e3af3.tar.gz
luasocket-c98dc991998c724a3f6a1fdd90b5d1d8a80e3af3.tar.bz2
luasocket-c98dc991998c724a3f6a1fdd90b5d1d8a80e3af3.zip
Bug feioso no UDP e possivelmente no TCP também.
Diffstat (limited to 'src/wsocket.c')
-rw-r--r--src/wsocket.c21
1 files changed, 6 insertions, 15 deletions
diff --git a/src/wsocket.c b/src/wsocket.c
index af3f8d8..023f470 100644
--- a/src/wsocket.c
+++ b/src/wsocket.c
@@ -207,9 +207,9 @@ int sock_send(p_sock ps, const char *data, size_t count, size_t *sent,
207 FD_ZERO(&fds); 207 FD_ZERO(&fds);
208 FD_SET(sock, &fds); 208 FD_SET(sock, &fds);
209 ret = sock_select(0, NULL, &fds, NULL, timeout); 209 ret = sock_select(0, NULL, &fds, NULL, timeout);
210 /* tell the caller to call us again because there is more data */ 210 /* tell the caller to call us again because now we can send */
211 if (ret > 0) return IO_DONE; 211 if (ret > 0) return IO_RETRY;
212 /* tell the caller there was no data before timeout */ 212 /* tell the caller we can't send anything before timint out */
213 else return IO_TIMEOUT; 213 else return IO_TIMEOUT;
214 /* here we know the connection has been closed */ 214 /* here we know the connection has been closed */
215 } else return IO_CLOSED; 215 } else return IO_CLOSED;
@@ -229,27 +229,18 @@ int sock_sendto(p_sock ps, const char *data, size_t count, size_t *sent,
229 t_sock sock = *ps; 229 t_sock sock = *ps;
230 int put; 230 int put;
231 int ret; 231 int ret;
232 /* avoid making system calls on closed sockets */
233 if (sock == SOCK_INVALID) return IO_CLOSED; 232 if (sock == SOCK_INVALID) return IO_CLOSED;
234 /* try to send something */
235 put = sendto(sock, data, (int) count, 0, addr, addr_len); 233 put = sendto(sock, data, (int) count, 0, addr, addr_len);
236 /* deal with failure */
237 if (put <= 0) { 234 if (put <= 0) {
238 /* in any case, nothing has been sent */
239 *sent = 0; 235 *sent = 0;
240 /* run select to avoid busy wait */
241 if (WSAGetLastError() == WSAEWOULDBLOCK) { 236 if (WSAGetLastError() == WSAEWOULDBLOCK) {
242 fd_set fds; 237 fd_set fds;
243 FD_ZERO(&fds); 238 FD_ZERO(&fds);
244 FD_SET(sock, &fds); 239 FD_SET(sock, &fds);
245 ret = sock_select(0, NULL, &fds, NULL, timeout); 240 ret = sock_select(0, NULL, &fds, NULL, timeout);
246 /* tell the caller to call us again because there is more data */ 241 if (ret > 0) return IO_RETRY;
247 if (ret > 0) return IO_DONE;
248 /* tell the caller there was no data before timeout */
249 else return IO_TIMEOUT; 242 else return IO_TIMEOUT;
250 /* here we know the connection has been closed */
251 } else return IO_CLOSED; 243 } else return IO_CLOSED;
252 /* here we successfully sent something */
253 } else { 244 } else {
254 *sent = put; 245 *sent = put;
255 return IO_DONE; 246 return IO_DONE;
@@ -273,7 +264,7 @@ int sock_recv(p_sock ps, char *data, size_t count, size_t *got, int timeout)
273 FD_ZERO(&fds); 264 FD_ZERO(&fds);
274 FD_SET(sock, &fds); 265 FD_SET(sock, &fds);
275 ret = sock_select(0, &fds, NULL, NULL, timeout); 266 ret = sock_select(0, &fds, NULL, NULL, timeout);
276 if (ret > 0) return IO_DONE; 267 if (ret > 0) return IO_RETRY;
277 else return IO_TIMEOUT; 268 else return IO_TIMEOUT;
278 } else { 269 } else {
279 *got = taken; 270 *got = taken;
@@ -299,7 +290,7 @@ int sock_recvfrom(p_sock ps, char *data, size_t count, size_t *got,
299 FD_ZERO(&fds); 290 FD_ZERO(&fds);
300 FD_SET(sock, &fds); 291 FD_SET(sock, &fds);
301 ret = sock_select(0, &fds, NULL, NULL, timeout); 292 ret = sock_select(0, &fds, NULL, NULL, timeout);
302 if (ret > 0) return IO_DONE; 293 if (ret > 0) return IO_RETRY;
303 else return IO_TIMEOUT; 294 else return IO_TIMEOUT;
304 } else { 295 } else {
305 *got = taken; 296 *got = taken;