diff options
author | Diego Nehab <diego@tecgraf.puc-rio.br> | 2004-11-27 07:58:04 +0000 |
---|---|---|
committer | Diego Nehab <diego@tecgraf.puc-rio.br> | 2004-11-27 07:58:04 +0000 |
commit | 7c97e8e40aaa665226fb54449773dc3134e755b2 (patch) | |
tree | 47888d4c924fc24bf3b355bf58120ea3cdc74bc4 /src/wsocket.c | |
parent | eb0fc857ddea6f084d338589e2a33d3e7d4eade6 (diff) | |
download | luasocket-7c97e8e40aaa665226fb54449773dc3134e755b2.tar.gz luasocket-7c97e8e40aaa665226fb54449773dc3134e755b2.tar.bz2 luasocket-7c97e8e40aaa665226fb54449773dc3134e755b2.zip |
Almost ready for beta3
Diffstat (limited to 'src/wsocket.c')
-rw-r--r-- | src/wsocket.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/src/wsocket.c b/src/wsocket.c index 1b169ed..0294dce 100644 --- a/src/wsocket.c +++ b/src/wsocket.c | |||
@@ -180,9 +180,10 @@ int sock_accept(p_sock ps, p_sock pa, SA *addr, socklen_t *len, p_tm tm) { | |||
180 | 180 | ||
181 | /*-------------------------------------------------------------------------*\ | 181 | /*-------------------------------------------------------------------------*\ |
182 | * Send with timeout | 182 | * Send with timeout |
183 | * On windows, if you try to send 10MB, the OS will buffer EVERYTHING | ||
184 | * this can take an awful lot of time and we will end up blocked. | ||
185 | * Therefore, whoever calls this function should not pass a huge buffer. | ||
183 | \*-------------------------------------------------------------------------*/ | 186 | \*-------------------------------------------------------------------------*/ |
184 | /* has to be larger than UDP_DATAGRAMSIZE !!!*/ | ||
185 | #define MAXCHUNK (64*1024) | ||
186 | int sock_send(p_sock ps, const char *data, size_t count, size_t *sent, p_tm tm) | 187 | int sock_send(p_sock ps, const char *data, size_t count, size_t *sent, p_tm tm) |
187 | { | 188 | { |
188 | int err; | 189 | int err; |
@@ -192,9 +193,7 @@ int sock_send(p_sock ps, const char *data, size_t count, size_t *sent, p_tm tm) | |||
192 | *sent = 0; | 193 | *sent = 0; |
193 | for ( ;; ) { | 194 | for ( ;; ) { |
194 | /* try to send something */ | 195 | /* try to send something */ |
195 | /* on windows, if you try to send 10MB, the OS will buffer EVERYTHING | 196 | int put = send(*ps, data, count, 0); |
196 | * this can take an awful lot of time and we will end up blocked. */ | ||
197 | int put = send(*ps, data, (count < MAXCHUNK)? (int)count: MAXCHUNK, 0); | ||
198 | /* if we sent something, we are done */ | 197 | /* if we sent something, we are done */ |
199 | if (put > 0) { | 198 | if (put > 0) { |
200 | *sent = put; | 199 | *sent = put; |
@@ -221,7 +220,7 @@ int sock_sendto(p_sock ps, const char *data, size_t count, size_t *sent, | |||
221 | if (*ps == SOCK_INVALID) return IO_CLOSED; | 220 | if (*ps == SOCK_INVALID) return IO_CLOSED; |
222 | *sent = 0; | 221 | *sent = 0; |
223 | for ( ;; ) { | 222 | for ( ;; ) { |
224 | int put = send(*ps, data, (int) count, 0); | 223 | int put = sendto(*ps, data, (int) count, 0, addr, len); |
225 | if (put > 0) { | 224 | if (put > 0) { |
226 | *sent = put; | 225 | *sent = put; |
227 | return IO_DONE; | 226 | return IO_DONE; |
@@ -298,13 +297,13 @@ void sock_setnonblocking(p_sock ps) { | |||
298 | int sock_gethostbyaddr(const char *addr, socklen_t len, struct hostent **hp) { | 297 | int sock_gethostbyaddr(const char *addr, socklen_t len, struct hostent **hp) { |
299 | *hp = gethostbyaddr(addr, len, AF_INET); | 298 | *hp = gethostbyaddr(addr, len, AF_INET); |
300 | if (*hp) return IO_DONE; | 299 | if (*hp) return IO_DONE; |
301 | else return h_errno; | 300 | else return WSAGetLastError(); |
302 | } | 301 | } |
303 | 302 | ||
304 | int sock_gethostbyname(const char *addr, struct hostent **hp) { | 303 | int sock_gethostbyname(const char *addr, struct hostent **hp) { |
305 | *hp = gethostbyname(addr); | 304 | *hp = gethostbyname(addr); |
306 | if (*hp) return IO_DONE; | 305 | if (*hp) return IO_DONE; |
307 | else return h_errno; | 306 | else return WSAGetLastError(); |
308 | } | 307 | } |
309 | 308 | ||
310 | /*-------------------------------------------------------------------------*\ | 309 | /*-------------------------------------------------------------------------*\ |