X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Fbin%2Fmemcapable.cc;h=54e9c2242bea3c28061814a83fda375e75dba85f;hb=2f289c64f625962d945ec3bee80f36bc5c61ee35;hp=1b9af02a5dc4bd596408351b8df6845255e55199;hpb=4b584c02c679edd005cd2e542d2ff1d9dcb312b9;p=awesomized%2Flibmemcached diff --git a/src/bin/memcapable.cc b/src/bin/memcapable.cc index 1b9af02a..54e9c224 100644 --- a/src/bin/memcapable.cc +++ b/src/bin/memcapable.cc @@ -32,13 +32,11 @@ # include #endif -#ifndef HAVE_GETOPT_H -# include "../../win32/getopt.h" -#endif +#include "p9y/getopt.hpp" +#include "p9y/socket.hpp" +#include "p9y/poll.hpp" #include "libmemcached-1.0/memcached.h" -#include "libmemcached/poll.h" -#include "libmemcached/socket.hpp" #include "libmemcachedprotocol-0.0/binary.h" #include "libmemcached/byteorder.h" @@ -132,14 +130,14 @@ static memcached_socket_t set_noblock(void) { int flags = fcntl(sock, F_GETFL, 0); if (flags == -1) { perror("Failed to get socket flags"); - memcached_close_socket(sock); + closesocket(sock); return INVALID_SOCKET; } if ((flags & O_NONBLOCK) != O_NONBLOCK) { if (fcntl(sock, F_SETFL, flags | O_NONBLOCK) == -1) { perror("Failed to set socket to nonblocking mode"); - memcached_close_socket(sock); + closesocket(sock); return INVALID_SOCKET; } } @@ -183,8 +181,8 @@ static ssize_t timeout_io_op(memcached_socket_t fd, short direction, const char } else { ret = recv(fd, const_cast(buf), len, 0); } - - if (ret == SOCKET_ERROR && get_socket_errno() == EWOULDBLOCK) { + int local_errno = get_socket_errno(); + if (ret == SOCKET_ERROR && local_errno == EWOULDBLOCK || (EAGAIN != EWOULDBLOCK && local_errno == EAGAIN)) { struct pollfd fds; memset(&fds, 0, sizeof(struct pollfd)); fds.events = direction;