You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by rj...@apache.org on 2007/12/12 18:11:02 UTC
svn commit: r603675 - /tomcat/connectors/trunk/jk/native/common/jk_connect.c
Author: rjung
Date: Wed Dec 12 09:11:02 2007
New Revision: 603675
URL: http://svn.apache.org/viewvc?rev=603675&view=rev
Log:
errno cleanup and comments in jk_connect.
Modified:
tomcat/connectors/trunk/jk/native/common/jk_connect.c
Modified: tomcat/connectors/trunk/jk/native/common/jk_connect.c
URL: http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/common/jk_connect.c?rev=603675&r1=603674&r2=603675&view=diff
==============================================================================
--- tomcat/connectors/trunk/jk/native/common/jk_connect.c (original)
+++ tomcat/connectors/trunk/jk/native/common/jk_connect.c Wed Dec 12 09:11:02 2007
@@ -410,6 +410,7 @@
* @param l logger
* @return JK_INVALID_SOCKET: some kind of error occured
* created socket: success
+ * @remark Cares about errno
*/
jk_sock_t jk_open_socket(struct sockaddr_in *addr, int keepalive,
int timeout, int sock_buf, jk_logger_t *l)
@@ -424,6 +425,7 @@
JK_TRACE_ENTER(l);
+ errno = 0;
sd = socket(AF_INET, SOCK_STREAM, 0);
if (!IS_VALID_SOCKET(sd)) {
JK_GET_SOCKET_ERRNO();
@@ -435,6 +437,7 @@
/* Disable Nagle algorithm */
if (setsockopt(sd, IPPROTO_TCP, TCP_NODELAY, (SET_TYPE)&set,
sizeof(set))) {
+ JK_GET_SOCKET_ERRNO();
jk_log(l, JK_LOG_ERROR,
"failed setting TCP_NODELAY (errno=%d)", errno);
jk_close_socket(sd, l);
@@ -448,6 +451,7 @@
set = 1;
if (setsockopt(sd, SOL_SOCKET, SO_KEEPALIVE, (SET_TYPE)&set,
sizeof(set))) {
+ JK_GET_SOCKET_ERRNO();
jk_log(l, JK_LOG_ERROR,
"failed setting SO_KEEPALIVE (errno=%d)", errno);
jk_close_socket(sd, l);
@@ -495,6 +499,7 @@
(const char *) &tmout, sizeof(int));
setsockopt(sd, SOL_SOCKET, SO_SNDTIMEO,
(const char *) &tmout, sizeof(int));
+ JK_GET_SOCKET_ERRNO();
#elif defined(SO_RCVTIMEO) && defined(USE_SO_RCVTIMEO) && defined(SO_SNDTIMEO) && defined(USE_SO_SNDTIMEO)
struct timeval tv;
tv.tv_sec = timeout;
@@ -579,10 +584,12 @@
* @return -1: some kind of error occured (!WIN32)
* SOCKET_ERROR: some kind of error occured (WIN32)
* 0: success
+ * @remark Does not change errno
*/
int jk_close_socket(jk_sock_t sd, jk_logger_t *l)
{
int rc;
+ int save_errno;
JK_TRACE_ENTER(l);
@@ -591,11 +598,13 @@
return -1;
}
+ save_errno = errno;
#if defined(WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
rc = closesocket(sd) ? -1 : 0;
#else
rc = close(sd);
#endif
+ errno = save_errno;
JK_TRACE_EXIT(l);
return rc;
}
@@ -620,11 +629,13 @@
* -1: some kind of error occured (!WIN32)
* SOCKET_ERROR: some kind of error occured (WIN32)
* 0: success
+ * @remark Does not change errno
*/
int jk_shutdown_socket(jk_sock_t sd, jk_logger_t *l)
{
char dummy[512];
int rc = 0;
+ int save_errno;
fd_set rs;
struct timeval tv;
time_t start = time(NULL);
@@ -636,11 +647,13 @@
return -1;
}
+ save_errno = errno;
/* Shut down the socket for write, which will send a FIN
* to the peer.
*/
if (shutdown(sd, SHUT_WR)) {
rc = jk_close_socket(sd, l);
+ errno = save_errno;
JK_TRACE_EXIT(l);
return rc;
}
@@ -679,6 +692,7 @@
} while (difftime(time(NULL), start) < MAX_SECS_TO_LINGER);
rc = jk_close_socket(sd, l);
+ errno = save_errno;
JK_TRACE_EXIT(l);
return rc;
}
@@ -693,6 +707,7 @@
* JK_SOCKET_EOF: no bytes could be sent
* >0: success, total size send
* @remark Always closes socket in case of error
+ * @remark Cares about errno
* @bug this fails on Unixes if len is too big for the underlying
* protocol
*/
@@ -703,6 +718,7 @@
JK_TRACE_ENTER(l);
+ errno = 0;
while (sent < len) {
do {
#if defined(WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
@@ -742,6 +758,7 @@
* JK_SOCKET_EOF: no bytes could be read
* >0: success, total size received
* @remark Always closes socket in case of error
+ * @remark Cares about errno
*/
int jk_tcp_socket_recvfull(jk_sock_t sd, unsigned char *b, int len, jk_logger_t *l)
{
@@ -750,6 +767,7 @@
JK_TRACE_ENTER(l);
+ errno = 0;
while (rdlen < len) {
do {
#if defined(WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
@@ -804,6 +822,7 @@
* JK_TRUE: success
* @remark Does not close socket in case of error
* to allow for iterative waiting
+ * @remark Cares about errno
*/
int jk_is_input_event(jk_sock_t sd, int timeout, jk_logger_t *l)
{
@@ -814,6 +833,7 @@
JK_TRACE_ENTER(l);
+ errno = 0;
FD_ZERO(&rset);
FD_SET(sd, &rset);
tv.tv_sec = timeout / 1000;
@@ -823,7 +843,6 @@
rc = select((int)sd + 1, &rset, NULL, NULL, &tv);
} while (rc < 0 && errno == EINTR);
- errno = 0;
if (rc == 0) {
/* Timeout. Set the errno to timeout */
#if defined(WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
@@ -842,6 +861,7 @@
JK_TRACE_EXIT(l);
return JK_FALSE;
}
+ errno = 0;
JK_TRACE_EXIT(l);
return JK_TRUE;
}
@@ -852,6 +872,7 @@
* @return JK_FALSE: failure
* JK_TRUE: success
* @remark Always closes socket in case of error
+ * @remark Cares about errno
*/
int jk_is_socket_connected(jk_sock_t sd, jk_logger_t *l)
{
@@ -861,6 +882,7 @@
JK_TRACE_ENTER(l);
+ errno = 0;
FD_ZERO(&fd);
FD_SET(sd, &fd);
@@ -877,6 +899,7 @@
tv.tv_usec = 1;
} while (JK_IS_SOCKET_ERROR(rc) && errno == EINTR);
+ errno = 0;
if (rc == 0) {
/* If we get a timeout, then we are still connected */
JK_TRACE_EXIT(l);
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org