| 77 | |
| 78 | |
| 79 | SocketImpl* SocketImpl::acceptConnection(SocketAddress& clientAddr) |
| 80 | { |
| 81 | if (_sockfd == POCO_INVALID_SOCKET) throw InvalidSocketException(); |
| 82 | |
| 83 | sockaddr_storage buffer; |
| 84 | struct sockaddr* pSA = reinterpret_cast<struct sockaddr*>(&buffer); |
| 85 | poco_socklen_t saLen = sizeof(buffer); |
| 86 | poco_socket_t sd; |
| 87 | do |
| 88 | { |
| 89 | sd = ::accept(_sockfd, pSA, &saLen); |
| 90 | } |
| 91 | while (sd == POCO_INVALID_SOCKET && lastError() == POCO_EINTR); |
| 92 | if (sd != POCO_INVALID_SOCKET) |
| 93 | { |
| 94 | clientAddr = SocketAddress(pSA, saLen); |
| 95 | return new StreamSocketImpl(sd); |
| 96 | } |
| 97 | error(); // will throw |
| 98 | return 0; |
| 99 | } |
| 100 | |
| 101 | |
| 102 | void SocketImpl::connect(const SocketAddress& address) |