aboutsummaryrefslogtreecommitdiff
path: root/src/wsocket.c
diff options
context:
space:
mode:
authorDiego Nehab <diego@tecgraf.puc-rio.br>2004-06-23 01:08:54 +0000
committerDiego Nehab <diego@tecgraf.puc-rio.br>2004-06-23 01:08:54 +0000
commita193c087a406f3f9b9d86f452a80b749f8d88301 (patch)
tree5576013d24b48d493dba776bc549e25daf1e0d81 /src/wsocket.c
parent1ce47ebe3942a8b18b3b709f1ad915ac9ce82782 (diff)
downloadluasocket-a193c087a406f3f9b9d86f452a80b749f8d88301.tar.gz
luasocket-a193c087a406f3f9b9d86f452a80b749f8d88301.tar.bz2
luasocket-a193c087a406f3f9b9d86f452a80b749f8d88301.zip
Fixing send/recv and optimizing.
Diffstat (limited to 'src/wsocket.c')
-rw-r--r--src/wsocket.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/wsocket.c b/src/wsocket.c
index e276fe0..7f3e066 100644
--- a/src/wsocket.c
+++ b/src/wsocket.c
@@ -200,7 +200,6 @@ int sock_send(p_sock ps, const char *data, size_t count, size_t *sent,
200{ 200{
201 t_sock sock = *ps; 201 t_sock sock = *ps;
202 int put; 202 int put;
203 int ret;
204 /* avoid making system calls on closed sockets */ 203 /* avoid making system calls on closed sockets */
205 if (sock == SOCK_INVALID) return IO_CLOSED; 204 if (sock == SOCK_INVALID) return IO_CLOSED;
206 /* try to send something */ 205 /* try to send something */
@@ -212,6 +211,9 @@ int sock_send(p_sock ps, const char *data, size_t count, size_t *sent,
212 /* run select to avoid busy wait */ 211 /* run select to avoid busy wait */
213 if (WSAGetLastError() == WSAEWOULDBLOCK) { 212 if (WSAGetLastError() == WSAEWOULDBLOCK) {
214 fd_set fds; 213 fd_set fds;
214 int ret;
215 /* optimize for the timeout = 0 case */
216 if (timeout == 0) return IO_TIMEOUT;
215 FD_ZERO(&fds); 217 FD_ZERO(&fds);
216 FD_SET(sock, &fds); 218 FD_SET(sock, &fds);
217 ret = sock_select(0, NULL, &fds, NULL, timeout); 219 ret = sock_select(0, NULL, &fds, NULL, timeout);
@@ -236,13 +238,14 @@ int sock_sendto(p_sock ps, const char *data, size_t count, size_t *sent,
236{ 238{
237 t_sock sock = *ps; 239 t_sock sock = *ps;
238 int put; 240 int put;
239 int ret;
240 if (sock == SOCK_INVALID) return IO_CLOSED; 241 if (sock == SOCK_INVALID) return IO_CLOSED;
241 put = sendto(sock, data, (int) count, 0, addr, addr_len); 242 put = sendto(sock, data, (int) count, 0, addr, addr_len);
242 if (put <= 0) { 243 if (put <= 0) {
243 *sent = 0; 244 *sent = 0;
244 if (WSAGetLastError() == WSAEWOULDBLOCK) { 245 if (WSAGetLastError() == WSAEWOULDBLOCK) {
245 fd_set fds; 246 fd_set fds;
247 int ret;
248 if (timeout == 0) return IO_TIMEOUT;
246 FD_ZERO(&fds); 249 FD_ZERO(&fds);
247 FD_SET(sock, &fds); 250 FD_SET(sock, &fds);
248 ret = sock_select(0, NULL, &fds, NULL, timeout); 251 ret = sock_select(0, NULL, &fds, NULL, timeout);
@@ -269,6 +272,7 @@ int sock_recv(p_sock ps, char *data, size_t count, size_t *got, int timeout)
269 int ret; 272 int ret;
270 *got = 0; 273 *got = 0;
271 if (taken == 0 || WSAGetLastError() != WSAEWOULDBLOCK) return IO_CLOSED; 274 if (taken == 0 || WSAGetLastError() != WSAEWOULDBLOCK) return IO_CLOSED;
275 if (timeout == 0) return IO_TIMEOUT;
272 FD_ZERO(&fds); 276 FD_ZERO(&fds);
273 FD_SET(sock, &fds); 277 FD_SET(sock, &fds);
274 ret = sock_select(0, &fds, NULL, NULL, timeout); 278 ret = sock_select(0, &fds, NULL, NULL, timeout);
@@ -295,6 +299,7 @@ int sock_recvfrom(p_sock ps, char *data, size_t count, size_t *got,
295 int ret; 299 int ret;
296 *got = 0; 300 *got = 0;
297 if (taken == 0 || WSAGetLastError() != WSAEWOULDBLOCK) return IO_CLOSED; 301 if (taken == 0 || WSAGetLastError() != WSAEWOULDBLOCK) return IO_CLOSED;
302 if (timeout == 0) return IO_TIMEOUT;
298 FD_ZERO(&fds); 303 FD_ZERO(&fds);
299 FD_SET(sock, &fds); 304 FD_SET(sock, &fds);
300 ret = sock_select(0, &fds, NULL, NULL, timeout); 305 ret = sock_select(0, &fds, NULL, NULL, timeout);