aboutsummaryrefslogtreecommitdiff
path: root/src/wsocket.c
diff options
context:
space:
mode:
authorDiego Nehab <diego@tecgraf.puc-rio.br>2003-11-27 00:30:54 +0000
committerDiego Nehab <diego@tecgraf.puc-rio.br>2003-11-27 00:30:54 +0000
commit3febb302ad28fd25de51cbc686739469b92d8921 (patch)
tree0a8d9a1070a7c1f2566c22562693fb27963037d9 /src/wsocket.c
parent9bc4e0648ab4a177293a94425594bdc54c9a84fa (diff)
downloadluasocket-3febb302ad28fd25de51cbc686739469b92d8921.tar.gz
luasocket-3febb302ad28fd25de51cbc686739469b92d8921.tar.bz2
luasocket-3febb302ad28fd25de51cbc686739469b92d8921.zip
Killed a few bugs found by Tomas.
Diffstat (limited to 'src/wsocket.c')
-rw-r--r--src/wsocket.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/wsocket.c b/src/wsocket.c
index f9e1084..1ba28b6 100644
--- a/src/wsocket.c
+++ b/src/wsocket.c
@@ -86,10 +86,12 @@ int sock_accept(p_sock ps, p_sock pa, SA *addr, socklen_t *addr_len,
86 SA dummy_addr; 86 SA dummy_addr;
87 socklen_t dummy_len; 87 socklen_t dummy_len;
88 fd_set fds; 88 fd_set fds;
89 if (sock == SOCK_INVALID) return IO_CLOSED;
89 tv.tv_sec = timeout / 1000; 90 tv.tv_sec = timeout / 1000;
90 tv.tv_usec = (timeout % 1000) * 1000; 91 tv.tv_usec = (timeout % 1000) * 1000;
91 FD_ZERO(&fds); 92 FD_ZERO(&fds);
92 FD_SET(sock, &fds); 93 FD_SET(sock, &fds);
94 *pa = SOCK_INVALID;
93 if (select(sock+1, &fds, NULL, NULL, timeout >= 0 ? &tv : NULL) <= 0) 95 if (select(sock+1, &fds, NULL, NULL, timeout >= 0 ? &tv : NULL) <= 0)
94 return IO_TIMEOUT; 96 return IO_TIMEOUT;
95 if (!addr) addr = &dummy_addr; 97 if (!addr) addr = &dummy_addr;
@@ -109,6 +111,7 @@ int sock_send(p_sock ps, const char *data, size_t count, size_t *sent,
109 struct timeval tv; 111 struct timeval tv;
110 fd_set fds; 112 fd_set fds;
111 ssize_t put = 0; 113 ssize_t put = 0;
114 if (sock == SOCK_INVALID) return IO_CLOSED;
112 int err; 115 int err;
113 int ret; 116 int ret;
114 tv.tv_sec = timeout / 1000; 117 tv.tv_sec = timeout / 1000;
@@ -148,6 +151,7 @@ int sock_sendto(p_sock ps, const char *data, size_t count, size_t *sent,
148 ssize_t put = 0; 151 ssize_t put = 0;
149 int err; 152 int err;
150 int ret; 153 int ret;
154 if (sock == SOCK_INVALID) return IO_CLOSED;
151 tv.tv_sec = timeout / 1000; 155 tv.tv_sec = timeout / 1000;
152 tv.tv_usec = (timeout % 1000) * 1000; 156 tv.tv_usec = (timeout % 1000) * 1000;
153 FD_ZERO(&fds); 157 FD_ZERO(&fds);
@@ -183,6 +187,7 @@ int sock_recv(p_sock ps, char *data, size_t count, size_t *got, int timeout)
183 fd_set fds; 187 fd_set fds;
184 int ret; 188 int ret;
185 ssize_t taken = 0; 189 ssize_t taken = 0;
190 if (sock == SOCK_INVALID) return IO_CLOSED;
186 tv.tv_sec = timeout / 1000; 191 tv.tv_sec = timeout / 1000;
187 tv.tv_usec = (timeout % 1000) * 1000; 192 tv.tv_usec = (timeout % 1000) * 1000;
188 FD_ZERO(&fds); 193 FD_ZERO(&fds);
@@ -214,6 +219,7 @@ int sock_recvfrom(p_sock ps, char *data, size_t count, size_t *got,
214 fd_set fds; 219 fd_set fds;
215 int ret; 220 int ret;
216 ssize_t taken = 0; 221 ssize_t taken = 0;
222 if (sock == SOCK_INVALID) return IO_CLOSED;
217 tv.tv_sec = timeout / 1000; 223 tv.tv_sec = timeout / 1000;
218 tv.tv_usec = (timeout % 1000) * 1000; 224 tv.tv_usec = (timeout % 1000) * 1000;
219 FD_ZERO(&fds); 225 FD_ZERO(&fds);