diff options
author | Diego Nehab <diego@tecgraf.puc-rio.br> | 2004-06-20 22:19:54 +0000 |
---|---|---|
committer | Diego Nehab <diego@tecgraf.puc-rio.br> | 2004-06-20 22:19:54 +0000 |
commit | f7579db9e830ef41f422a280d26c9077f48728e5 (patch) | |
tree | d96affac7f5e8203d2e9c4a053213a992cd76650 /src/usocket.c | |
parent | 5dc5c3ebe8f111bba01762ca0f5edba912c4f0b9 (diff) | |
download | luasocket-f7579db9e830ef41f422a280d26c9077f48728e5.tar.gz luasocket-f7579db9e830ef41f422a280d26c9077f48728e5.tar.bz2 luasocket-f7579db9e830ef41f422a280d26c9077f48728e5.zip |
Fixing bugs...
Diffstat (limited to 'src/usocket.c')
-rw-r--r-- | src/usocket.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/usocket.c b/src/usocket.c index 6b4182b..ea0f172 100644 --- a/src/usocket.c +++ b/src/usocket.c | |||
@@ -95,7 +95,8 @@ const char *sock_connect(p_sock ps, SA *addr, socklen_t addr_len, p_tm tm) | |||
95 | /* don't call on closed socket */ | 95 | /* don't call on closed socket */ |
96 | if (sock == SOCK_INVALID) return io_strerror(IO_CLOSED); | 96 | if (sock == SOCK_INVALID) return io_strerror(IO_CLOSED); |
97 | /* ask system to connect */ | 97 | /* ask system to connect */ |
98 | err = connect(sock, addr, addr_len); | 98 | do err = connect(sock, addr, addr_len); |
99 | while (err < 0 && errno == EINTR); | ||
99 | /* if no error, we're done */ | 100 | /* if no error, we're done */ |
100 | if (err == 0) return NULL; | 101 | if (err == 0) return NULL; |
101 | /* make sure the system is trying to connect */ | 102 | /* make sure the system is trying to connect */ |
@@ -174,9 +175,13 @@ const char *sock_accept(p_sock ps, p_sock pa, SA *addr, | |||
174 | int err; | 175 | int err; |
175 | fd_set fds; | 176 | fd_set fds; |
176 | /* try to accept */ | 177 | /* try to accept */ |
177 | *pa = accept(sock, addr, addr_len); | 178 | do *pa = accept(sock, addr, addr_len); |
179 | while (*pa < 0 && errno == EINTR); | ||
178 | /* if result is valid, we are done */ | 180 | /* if result is valid, we are done */ |
179 | if (*pa != SOCK_INVALID) return NULL; | 181 | if (*pa != SOCK_INVALID) { |
182 | sock_setnonblocking(pa); | ||
183 | return NULL; | ||
184 | } | ||
180 | /* find out if we failed for a fatal reason */ | 185 | /* find out if we failed for a fatal reason */ |
181 | if (errno != EWOULDBLOCK && errno != ECONNABORTED) | 186 | if (errno != EWOULDBLOCK && errno != ECONNABORTED) |
182 | return sock_acceptstrerror(errno); | 187 | return sock_acceptstrerror(errno); |