aboutsummaryrefslogtreecommitdiff
path: root/src/usocket.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/usocket.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/usocket.c')
-rw-r--r--src/usocket.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/usocket.c b/src/usocket.c
index 202238b..b120d7b 100644
--- a/src/usocket.c
+++ b/src/usocket.c
@@ -83,10 +83,12 @@ int sock_accept(p_sock ps, p_sock pa, SA *addr, socklen_t *addr_len,
83 SA dummy_addr; 83 SA dummy_addr;
84 socklen_t dummy_len; 84 socklen_t dummy_len;
85 fd_set fds; 85 fd_set fds;
86 if (sock == SOCK_INVALID) return IO_CLOSED;
86 tv.tv_sec = timeout / 1000; 87 tv.tv_sec = timeout / 1000;
87 tv.tv_usec = (timeout % 1000) * 1000; 88 tv.tv_usec = (timeout % 1000) * 1000;
88 FD_ZERO(&fds); 89 FD_ZERO(&fds);
89 FD_SET(sock, &fds); 90 FD_SET(sock, &fds);
91 *pa = SOCK_INVALID;
90 if (select(sock+1, &fds, NULL, NULL, timeout >= 0 ? &tv : NULL) <= 0) 92 if (select(sock+1, &fds, NULL, NULL, timeout >= 0 ? &tv : NULL) <= 0)
91 return IO_TIMEOUT; 93 return IO_TIMEOUT;
92 if (!addr) addr = &dummy_addr; 94 if (!addr) addr = &dummy_addr;
@@ -108,6 +110,7 @@ int sock_send(p_sock ps, const char *data, size_t count, size_t *sent,
108 ssize_t put = 0; 110 ssize_t put = 0;
109 int err; 111 int err;
110 int ret; 112 int ret;
113 if (sock == SOCK_INVALID) return IO_CLOSED;
111 tv.tv_sec = timeout / 1000; 114 tv.tv_sec = timeout / 1000;
112 tv.tv_usec = (timeout % 1000) * 1000; 115 tv.tv_usec = (timeout % 1000) * 1000;
113 FD_ZERO(&fds); 116 FD_ZERO(&fds);
@@ -145,6 +148,7 @@ int sock_sendto(p_sock ps, const char *data, size_t count, size_t *sent,
145 ssize_t put = 0; 148 ssize_t put = 0;
146 int err; 149 int err;
147 int ret; 150 int ret;
151 if (sock == SOCK_INVALID) return IO_CLOSED;
148 tv.tv_sec = timeout / 1000; 152 tv.tv_sec = timeout / 1000;
149 tv.tv_usec = (timeout % 1000) * 1000; 153 tv.tv_usec = (timeout % 1000) * 1000;
150 FD_ZERO(&fds); 154 FD_ZERO(&fds);
@@ -180,6 +184,7 @@ int sock_recv(p_sock ps, char *data, size_t count, size_t *got, int timeout)
180 fd_set fds; 184 fd_set fds;
181 int ret; 185 int ret;
182 ssize_t taken = 0; 186 ssize_t taken = 0;
187 if (sock == SOCK_INVALID) return IO_CLOSED;
183 tv.tv_sec = timeout / 1000; 188 tv.tv_sec = timeout / 1000;
184 tv.tv_usec = (timeout % 1000) * 1000; 189 tv.tv_usec = (timeout % 1000) * 1000;
185 FD_ZERO(&fds); 190 FD_ZERO(&fds);
@@ -210,6 +215,7 @@ int sock_recvfrom(p_sock ps, char *data, size_t count, size_t *got,
210 struct timeval tv; 215 struct timeval tv;
211 fd_set fds; 216 fd_set fds;
212 int ret; 217 int ret;
218 if (sock == SOCK_INVALID) return IO_CLOSED;
213 ssize_t taken = 0; 219 ssize_t taken = 0;
214 tv.tv_sec = timeout / 1000; 220 tv.tv_sec = timeout / 1000;
215 tv.tv_usec = (timeout % 1000) * 1000; 221 tv.tv_usec = (timeout % 1000) * 1000;