diff options
author | Jorge Arellano Cid <jcid@dillo.org> | 2009-11-01 16:31:59 -0300 |
---|---|---|
committer | Jorge Arellano Cid <jcid@dillo.org> | 2009-11-01 16:31:59 -0300 |
commit | df2f261ccb261447576b98b9e466f06daf33115d (patch) | |
tree | fbb802b7b019c806bea8e6d9b4c7dc12f6ede53d /dpid/dpid.c | |
parent | 29ea3975335bad3fa72afe8c1724d1d00355c396 (diff) |
Removed the write/fwrite mix in dpip. Introduced a_Dpip_dsh_trywrite()
Several cleanups and more error handling sprinkled all over too.
Diffstat (limited to 'dpid/dpid.c')
-rw-r--r-- | dpid/dpid.c | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/dpid/dpid.c b/dpid/dpid.c index 42b0413c..6a0bc511 100644 --- a/dpid/dpid.c +++ b/dpid/dpid.c @@ -513,6 +513,25 @@ int fill_services_list(struct dp *attlist, int numdpis, Dlist **services_list) return (dList_length(*services_list)); } +/* + * Return a socket file descriptor + * (useful to set socket options in a uniform way) + */ +static int make_socket_fd() +{ + int ret; + + if ((ret = socket(AF_INET, SOCK_STREAM, 0)) == -1) { + ERRMSG("make_socket_fd", "socket", errno); + } + + /* set some buffering to increase the transfer's speed */ + //setsockopt(sock_fd, SOL_SOCKET, SO_SNDBUF, + // &sock_buflen, (socklen_t)sizeof(sock_buflen)); + + return ret; +} + /*! Bind a socket port on localhost. Try to be close to base_port. * \Return * \li listening socket file descriptor on success @@ -522,19 +541,14 @@ int bind_socket_fd(int base_port, int *p_port) { int sock_fd, port; struct sockaddr_in sin; - //size_t sock_buflen = 8192; int ok = 0, last_port = base_port + 50; - if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { - ERRMSG("bind_socket_fd", "socket", errno); + if ((sock_fd = make_socket_fd()) == -1) { return (-1); /* avoids nested ifs */ } /* Set the socket FD to close on exec */ fcntl(sock_fd, F_SETFD, FD_CLOEXEC | fcntl(sock_fd, F_GETFD)); - /* set some buffering to increase the transfer's speed */ - //setsockopt(sock_fd, SOL_SOCKET, SO_SNDBUF, - // &sock_buflen, (socklen_t)sizeof(sock_buflen)); memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; @@ -579,8 +593,9 @@ int save_comm_keys(int srs_port) MSG("save_comm_keys: open %s\n", dStrerror(errno)); } else { snprintf(port_str, 16, "%d %s\n", srs_port, SharedKey); - if (CKD_WRITE(fd, port_str) != -1) + if (CKD_WRITE(fd, port_str) != -1 && CKD_CLOSE(fd) != -1) { ret = 1; + } } return ret; @@ -734,10 +749,11 @@ void stop_active_dpis(struct dp *dpi_attr_list, int numdpis) if (dpi_attr_list[i].pid == 1 || dpi_attr_list[i].filter) continue; - if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { + if ((sock_fd = make_socket_fd()) == -1) { ERRMSG("stop_active_dpis", "socket", errno); continue; } + sin.sin_port = htons(dpi_attr_list[i].port); if (ckd_connect(sock_fd, (struct sockaddr *)&sin, sizeof(sin)) == -1) { ERRMSG("stop_active_dpis", "connect", errno); |