unix: clean up uv_accept()

This commit is contained in:
Ben Noordhuis 2013-05-12 10:32:49 +02:00
parent ab157df5ee
commit 7d7fe6a9bc

View File

@ -536,8 +536,6 @@ void uv__server_io(uv_loop_t* loop, uv__io_t* w, unsigned int events) {
int uv_accept(uv_stream_t* server, uv_stream_t* client) {
uv_stream_t* streamServer;
uv_stream_t* streamClient;
int saved_errno;
int status;
@ -547,30 +545,28 @@ int uv_accept(uv_stream_t* server, uv_stream_t* client) {
saved_errno = errno;
status = -1;
streamServer = (uv_stream_t*)server;
streamClient = (uv_stream_t*)client;
if (streamServer->accepted_fd < 0) {
if (server->accepted_fd < 0) {
uv__set_sys_error(server->loop, EAGAIN);
goto out;
}
switch (streamClient->type) {
switch (client->type) {
case UV_NAMED_PIPE:
case UV_TCP:
if (uv__stream_open(streamClient, streamServer->accepted_fd,
UV_STREAM_READABLE | UV_STREAM_WRITABLE)) {
if (uv__stream_open(client,
server->accepted_fd,
UV_STREAM_READABLE | UV_STREAM_WRITABLE)) {
/* TODO handle error */
close(streamServer->accepted_fd);
streamServer->accepted_fd = -1;
close(server->accepted_fd);
server->accepted_fd = -1;
goto out;
}
break;
case UV_UDP:
if (uv_udp_open((uv_udp_t*) client, streamServer->accepted_fd)) {
close(streamServer->accepted_fd);
streamServer->accepted_fd = -1;
if (uv_udp_open((uv_udp_t*) client, server->accepted_fd)) {
close(server->accepted_fd);
server->accepted_fd = -1;
goto out;
}
break;
@ -579,8 +575,8 @@ int uv_accept(uv_stream_t* server, uv_stream_t* client) {
assert(0);
}
uv__io_start(streamServer->loop, &streamServer->io_watcher, UV__POLLIN);
streamServer->accepted_fd = -1;
uv__io_start(server->loop, &server->io_watcher, UV__POLLIN);
server->accepted_fd = -1;
status = 0;
out: