浏览代码

improve socket connect() error reporting with poll()

turns out that poll() may (and on linux does) signal POLLERR on
connection failure. this is unlike select(), which is specified to
signal write readiness in every case.
consequently, check whether we are connecting before checking for
POLLERR.
Oswald Buddenhagen 12 年之前
父节点
当前提交
37a28d8133
共有 1 个文件被更改,包括 5 次插入5 次删除
  1. 5 5
      src/socket.c

+ 5 - 5
src/socket.c

@@ -633,14 +633,14 @@ socket_fd_cb( int events, void *aux )
 {
 	conn_t *conn = (conn_t *)aux;
 
-	if (events & POLLERR) {
-		error( "Unidentified socket error from %s.\n", conn->name );
-		socket_fail( conn );
+	if (conn->state == SCK_CONNECTING) {
+		socket_connected( conn );
 		return;
 	}
 
-	if (conn->state == SCK_CONNECTING) {
-		socket_connected( conn );
+	if (events & POLLERR) {
+		error( "Unidentified socket error from %s.\n", conn->name );
+		socket_fail( conn );
 		return;
 	}