| 254 | } |
| 255 | |
| 256 | ConnectResult TCPSocket::connect(const IPAddress &ip, u16 port) |
| 257 | { |
| 258 | close(); |
| 259 | _priv->socket = socket_internal::open(); |
| 260 | |
| 261 | sockaddr_in addr_in; |
| 262 | addr_in.sin_family = AF_INET; |
| 263 | addr_in.sin_addr.s_addr = htonl(ip.address()); |
| 264 | addr_in.sin_port = htons(port); |
| 265 | |
| 266 | int err = ::connect(_priv->socket, (const sockaddr *)&addr_in, sizeof(sockaddr_in)); |
| 267 | |
| 268 | ConnectResult cr; |
| 269 | cr.error = ConnectResult::SUCCESS; |
| 270 | |
| 271 | if (err == SOCKET_ERROR) { |
| 272 | if (last_error() == WSAECONNREFUSED) |
| 273 | cr.error = ConnectResult::REFUSED; |
| 274 | else if (last_error() == WSAETIMEDOUT) |
| 275 | cr.error = ConnectResult::TIMEOUT; |
| 276 | else |
| 277 | cr.error = ConnectResult::UNKNOWN; |
| 278 | } |
| 279 | |
| 280 | return cr; |
| 281 | } |
| 282 | |
| 283 | BindResult TCPSocket::bind(u16 port) |
| 284 | { |