You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by tr...@locus.apache.org on 2000/04/28 03:35:16 UTC
cvs commit: apache-2.0/src/lib/apr/network_io/win32 sockets.c poll.c
trawick 00/04/27 18:35:16
Modified: src/lib/apr/network_io/win32 sockets.c poll.c
Log:
APR on Win32:
Fix some return code problems (APR_EEXIST, errno, etc.).
Integrate the Win32 part of Chia-liang Kao's latest patch
for ap_poll et al.
Get rid of some unnecessary argument checking.
Revision Changes Path
1.27 +11 -26 apache-2.0/src/lib/apr/network_io/win32/sockets.c
Index: sockets.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/win32/sockets.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- sockets.c 2000/04/19 21:17:39 1.26
+++ sockets.c 2000/04/28 01:35:15 1.27
@@ -87,13 +87,16 @@
(*new)->remote_addr = (struct sockaddr_in *)ap_palloc((*new)->cntxt,
sizeof(struct sockaddr_in));
- if ((*new)->local_addr == NULL) {
+ if (((*new)->local_addr == NULL) || ((*new)->remote_addr == NULL)) {
return APR_ENOMEM;
}
/* For right now, we are not using socket groups. We may later.
* No flags to use when creating a socket, so use 0 for that parameter as well.
*/
(*new)->sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ if ((*new)->sock == INVALID_SOCKET) {
+ return WSAGetLastError();
+ }
(*new)->local_addr->sin_family = AF_INET;
@@ -101,9 +104,6 @@
(*new)->local_addr->sin_port = 0;
- if ((*new)->sock == INVALID_SOCKET) {
- return APR_EEXIST;
- }
ap_register_cleanup((*new)->cntxt, (void *)(*new),
socket_cleanup, ap_null_cleanup);
return APR_SUCCESS;
@@ -131,7 +131,7 @@
return APR_SUCCESS;
}
else {
- return APR_EEXIST;
+ return WSAGetLastError();
}
}
@@ -144,7 +144,7 @@
ap_status_t ap_bind(ap_socket_t *sock)
{
if (bind(sock->sock, (struct sockaddr *)sock->local_addr, sock->addr_len) == -1) {
- return errno;
+ return WSAGetLastError();
}
else
return APR_SUCCESS;
@@ -153,7 +153,7 @@
ap_status_t ap_listen(ap_socket_t *sock, ap_int32_t backlog)
{
if (listen(sock->sock, backlog) == SOCKET_ERROR)
- return APR_EEXIST;
+ return WSAGetLastError();
else
return APR_SUCCESS;
}
@@ -176,7 +176,7 @@
&(*new)->addr_len);
if ((*new)->sock == INVALID_SOCKET) {
- return errno;
+ return WSAGetLastError();
}
ap_register_cleanup((*new)->cntxt, (void *)(*new),
@@ -201,7 +201,7 @@
else {
hp = gethostbyname(hostname);
if (!hp) {
- return (WSAGetLastError() + APR_OS_START_SYSERR);
+ return WSAGetLastError();
}
memcpy((char *)&sock->remote_addr->sin_addr, hp->h_addr_list[0], hp->h_length);
sock->addr_len = sizeof(*sock->remote_addr);
@@ -228,32 +228,17 @@
ap_status_t ap_get_socketdata(void **data, char *key, ap_socket_t *socket)
{
- if (socket != NULL) {
- return ap_get_userdata(data, key, socket->cntxt);
- }
- else {
- data = NULL;
- return APR_ENOSOCKET;
- }
+ return ap_get_userdata(data, key, socket->cntxt);
}
ap_status_t ap_set_socketdata(ap_socket_t *socket, void *data, char *key,
ap_status_t (*cleanup) (void *))
{
- if (socket != NULL) {
- return ap_set_userdata(data, key, cleanup, socket->cntxt);
- }
- else {
- data = NULL;
- return APR_ENOSOCKET;
- }
+ return ap_set_userdata(data, key, cleanup, socket->cntxt);
}
ap_status_t ap_get_os_sock(ap_os_sock_t *thesock, ap_socket_t *sock)
{
- if (sock == NULL) {
- return APR_ENOSOCKET;
- }
*thesock = sock->sock;
return APR_SUCCESS;
}
1.14 +8 -3 apache-2.0/src/lib/apr/network_io/win32/poll.c
Index: poll.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/win32/poll.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- poll.c 2000/04/16 02:27:53 1.13
+++ poll.c 2000/04/28 01:35:15 1.14
@@ -218,15 +218,15 @@
}
}
-ap_status_t ap_remove_poll_socket(ap_pollfd_t *aprset,
- ap_socket_t *sock, ap_int16_t events)
+ap_status_t ap_mask_poll_socket(ap_pollfd_t *aprset,
+ ap_socket_t *sock, ap_int16_t events)
{
if (events & APR_POLLIN) {
FD_CLR(sock->sock, aprset->read);
aprset->numread--;
}
if (events & APR_POLLPRI) {
- FD_CLR(sock->sock, aprset->read);
+ FD_CLR(sock->sock, aprset->except);
aprset->numexcept--;
}
if (events & APR_POLLOUT) {
@@ -234,6 +234,11 @@
aprset->numwrite--;
}
return APR_SUCCESS;
+}
+
+ap_status_t ap_remove_poll_socket(ap_pollfd_t *aprset, ap_socket_t *sock)
+{
+ return ap_mask_poll_socket(aprset, sock, ~0);
}
ap_status_t ap_clear_poll_sockets(ap_pollfd_t *aprset, ap_int16_t events)