Changeset 14:3caa1d3122db in xplcommon for src/xplcommon/posix/ServerSocket.cc
- Timestamp:
- 12/29/12 10:03:12 (11 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/xplcommon/posix/ServerSocket.cc
r6 r14 34 34 #include "Socket.h" 35 35 36 #include <cstdio>37 38 36 #include <unistd.h> 39 37 #include <sys/socket.h> … … 49 47 Waitable(waiter, Socket::socket(domain, type, protocol)) 50 48 { 49 if (fd<0) setErrorCodeFromErrno(); 51 50 } 52 51 … … 55 54 ServerSocket::~ServerSocket() 56 55 { 57 ::close(fd);56 if (fd>=0) ::close(fd); 58 57 } 59 58 60 59 //------------------------------------------------------------------------------ 61 60 62 intServerSocket::bind(const struct sockaddr* addr, size_t addrlen,63 bool reuseaddr)61 bool ServerSocket::bind(const struct sockaddr* addr, size_t addrlen, 62 bool reuseaddr) 64 63 { 65 64 if (reuseaddr) { 66 65 int reuse = 1; 67 66 if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse))<0) { 68 perror("xplcommon::posix::Socket::bind: setsockopt");69 return -1;67 setErrorCodeFromErrno(); 68 return false; 70 69 } 71 70 } 72 71 73 return ::bind(fd, addr, addrlen); 72 if (::bind(fd, addr, addrlen)<0) { 73 setErrorCodeFromErrno(); 74 return false; 75 } 76 77 return true; 74 78 } 75 79 76 80 //------------------------------------------------------------------------------ 77 81 78 intServerSocket::listen(int backlog)82 bool ServerSocket::listen(int backlog) 79 83 { 80 return ::listen(fd, backlog); 84 if (::listen(fd, backlog)<0) { 85 setErrorCodeFromErrno(); 86 return false; 87 } else { 88 return true; 89 } 90 } 91 92 //------------------------------------------------------------------------------ 93 94 int ServerSocket::accept(struct sockaddr* addr, size_t* addrlen) 95 { 96 socklen_t alen = (addrlen==0) ? 0 : *addrlen; 97 int result = ::accept(fd, addr, (addrlen==0) ? 0 : &alen); 98 if (result<0 && errno!=EAGAIN && errno!=EWOULDBLOCK) { 99 setErrorCodeFromErrno(); 100 } else { 101 if (addrlen!=0) *addrlen = alen; 102 } 103 return result; 81 104 } 82 105
Note:
See TracChangeset
for help on using the changeset viewer.