Navigation Menu

Skip to content
This repository has been archived by the owner on May 4, 2018. It is now read-only.

Commit

Permalink
unix,win: Start unifying shared tcp connect code.
Browse files Browse the repository at this point in the history
  • Loading branch information
erickt authored and ry committed Oct 4, 2011
1 parent e3f2631 commit 85368e8
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 36 deletions.
26 changes: 4 additions & 22 deletions src/unix/tcp.c
Expand Up @@ -216,55 +216,37 @@ int uv_tcp_listen(uv_tcp_t* tcp, int backlog, uv_connection_cb cb) {
}


int uv_tcp_connect(uv_connect_t* req,
int uv__tcp_connect(uv_connect_t* req,
uv_tcp_t* handle,
struct sockaddr_in address,
uv_connect_cb cb) {
int saved_errno;
int saved_errno = errno;
int status;

saved_errno = errno;
status = -1;

if (handle->type != UV_TCP || address.sin_family != AF_INET) {
uv__set_sys_error(handle->loop, EINVAL);
goto out;
}

status = uv__connect(req,
(uv_stream_t*)handle,
(struct sockaddr*)&address,
sizeof address,
cb);

out:
errno = saved_errno;
return status;
}


int uv_tcp_connect6(uv_connect_t* req,
int uv__tcp_connect6(uv_connect_t* req,
uv_tcp_t* handle,
struct sockaddr_in6 address,
uv_connect_cb cb) {
int saved_errno;
int saved_errno = errno;
int status;

saved_errno = errno;
status = -1;

if (handle->type != UV_TCP || address.sin6_family != AF_INET6) {
uv__set_sys_error(handle->loop, EINVAL);
goto out;
}

status = uv__connect(req,
(uv_stream_t*)handle,
(struct sockaddr*)&address,
sizeof address,
cb);

out:
errno = saved_errno;
return status;
}
24 changes: 24 additions & 0 deletions src/uv-common.c
Expand Up @@ -206,3 +206,27 @@ void uv_remove_ares_handle(uv_ares_task_t* handle) {
int uv_ares_handles_empty(uv_loop_t* loop) {
return loop->uv_ares_handles_ ? 0 : 1;
}

int uv_tcp_connect(uv_connect_t* req,
uv_tcp_t* handle,
struct sockaddr_in address,
uv_connect_cb cb) {
if (handle->type != UV_TCP || address.sin_family != AF_INET) {
uv__set_artificial_error(handle->loop, UV_EINVAL);
return -1;
}

return uv__tcp_connect(req, handle, address, cb);
}

int uv_tcp_connect6(uv_connect_t* req,
uv_tcp_t* handle,
struct sockaddr_in6 address,
uv_connect_cb cb) {
if (handle->type != UV_TCP || address.sin6_family != AF_INET6) {
uv__set_artificial_error(handle->loop, UV_EINVAL);
return -1;
}

return uv__tcp_connect6(req, handle, address, cb);
}
11 changes: 11 additions & 0 deletions src/uv-common.h
Expand Up @@ -53,4 +53,15 @@ void uv__set_error(uv_loop_t* loop, uv_err_code code, int sys_error);
void uv__set_sys_error(uv_loop_t* loop, int sys_error);
void uv__set_artificial_error(uv_loop_t* loop, uv_err_code code);

int uv__tcp_connect(uv_connect_t* req,
uv_tcp_t* handle,
struct sockaddr_in address,
uv_connect_cb cb);

int uv__tcp_connect6(uv_connect_t* req,
uv_tcp_t* handle,
struct sockaddr_in6 address,
uv_connect_cb cb);


#endif /* UV_COMMON_H_ */
22 changes: 8 additions & 14 deletions src/win/tcp.c
Expand Up @@ -472,8 +472,10 @@ int uv_tcp_read_start(uv_tcp_t* handle, uv_alloc_cb alloc_cb,
}


int uv_tcp_connect(uv_connect_t* req, uv_tcp_t* handle,
struct sockaddr_in address, uv_connect_cb cb) {
int uv__tcp_connect(uv_connect_t* req,
uv_tcp_t* handle,
struct sockaddr_in address,
uv_connect_cb cb) {
uv_loop_t* loop = handle->loop;
int addrsize = sizeof(struct sockaddr_in);
BOOL success;
Expand All @@ -484,11 +486,6 @@ int uv_tcp_connect(uv_connect_t* req, uv_tcp_t* handle,
return -1;
}

if (handle->type != UV_TCP || address.sin_family != AF_INET) {
uv__set_sys_error(loop, WSAEINVAL);
return -1;
}

if (!(handle->flags & UV_HANDLE_BOUND) &&
uv_tcp_bind(handle, uv_addr_ip4_any_) < 0)
return -1;
Expand Down Expand Up @@ -523,8 +520,10 @@ int uv_tcp_connect(uv_connect_t* req, uv_tcp_t* handle,
}


int uv_tcp_connect6(uv_connect_t* req, uv_tcp_t* handle,
struct sockaddr_in6 address, uv_connect_cb cb) {
int uv__tcp_connect6(uv_connect_t* req,
uv_tcp_t* handle,
struct sockaddr_in6 address,
uv_connect_cb cb) {
uv_loop_t* loop = handle->loop;
int addrsize = sizeof(struct sockaddr_in6);
BOOL success;
Expand All @@ -540,11 +539,6 @@ int uv_tcp_connect6(uv_connect_t* req, uv_tcp_t* handle,
return -1;
}

if (handle->type != UV_TCP || address.sin6_family != AF_INET6) {
uv__set_sys_error(loop, WSAEINVAL);
return -1;
}

if (!(handle->flags & UV_HANDLE_BOUND) &&
uv_tcp_bind6(handle, uv_addr_ip6_any_) < 0)
return -1;
Expand Down

0 comments on commit 85368e8

Please sign in to comment.