|
@@ -36,19 +36,20 @@
|
|
* not support simultaneous connects (two "client" sockets connecting).
|
|
* not support simultaneous connects (two "client" sockets connecting).
|
|
*
|
|
*
|
|
* - "Server" sockets are referred to as listener sockets throughout this
|
|
* - "Server" sockets are referred to as listener sockets throughout this
|
|
- * implementation because they are in the SS_LISTEN state. When a connection
|
|
|
|
- * request is received (the second kind of socket mentioned above), we create a
|
|
|
|
- * new socket and refer to it as a pending socket. These pending sockets are
|
|
|
|
- * placed on the pending connection list of the listener socket. When future
|
|
|
|
- * packets are received for the address the listener socket is bound to, we
|
|
|
|
- * check if the source of the packet is from one that has an existing pending
|
|
|
|
- * connection. If it does, we process the packet for the pending socket. When
|
|
|
|
- * that socket reaches the connected state, it is removed from the listener
|
|
|
|
- * socket's pending list and enqueued in the listener socket's accept queue.
|
|
|
|
- * Callers of accept(2) will accept connected sockets from the listener socket's
|
|
|
|
- * accept queue. If the socket cannot be accepted for some reason then it is
|
|
|
|
- * marked rejected. Once the connection is accepted, it is owned by the user
|
|
|
|
- * process and the responsibility for cleanup falls with that user process.
|
|
|
|
|
|
+ * implementation because they are in the VSOCK_SS_LISTEN state. When a
|
|
|
|
+ * connection request is received (the second kind of socket mentioned above),
|
|
|
|
+ * we create a new socket and refer to it as a pending socket. These pending
|
|
|
|
+ * sockets are placed on the pending connection list of the listener socket.
|
|
|
|
+ * When future packets are received for the address the listener socket is
|
|
|
|
+ * bound to, we check if the source of the packet is from one that has an
|
|
|
|
+ * existing pending connection. If it does, we process the packet for the
|
|
|
|
+ * pending socket. When that socket reaches the connected state, it is removed
|
|
|
|
+ * from the listener socket's pending list and enqueued in the listener
|
|
|
|
+ * socket's accept queue. Callers of accept(2) will accept connected sockets
|
|
|
|
+ * from the listener socket's accept queue. If the socket cannot be accepted
|
|
|
|
+ * for some reason then it is marked rejected. Once the connection is
|
|
|
|
+ * accepted, it is owned by the user process and the responsibility for cleanup
|
|
|
|
+ * falls with that user process.
|
|
*
|
|
*
|
|
* - It is possible that these pending sockets will never reach the connected
|
|
* - It is possible that these pending sockets will never reach the connected
|
|
* state; in fact, we may never receive another packet after the connection
|
|
* state; in fact, we may never receive another packet after the connection
|
|
@@ -114,8 +115,6 @@ static struct proto vsock_proto = {
|
|
*/
|
|
*/
|
|
#define VSOCK_DEFAULT_CONNECT_TIMEOUT (2 * HZ)
|
|
#define VSOCK_DEFAULT_CONNECT_TIMEOUT (2 * HZ)
|
|
|
|
|
|
-#define SS_LISTEN 255
|
|
|
|
-
|
|
|
|
static const struct vsock_transport *transport;
|
|
static const struct vsock_transport *transport;
|
|
static DEFINE_MUTEX(vsock_register_mutex);
|
|
static DEFINE_MUTEX(vsock_register_mutex);
|
|
|
|
|
|
@@ -887,7 +886,7 @@ static unsigned int vsock_poll(struct file *file, struct socket *sock,
|
|
/* Listening sockets that have connections in their accept
|
|
/* Listening sockets that have connections in their accept
|
|
* queue can be read.
|
|
* queue can be read.
|
|
*/
|
|
*/
|
|
- if (sk->sk_state == SS_LISTEN
|
|
|
|
|
|
+ if (sk->sk_state == VSOCK_SS_LISTEN
|
|
&& !vsock_is_accept_queue_empty(sk))
|
|
&& !vsock_is_accept_queue_empty(sk))
|
|
mask |= POLLIN | POLLRDNORM;
|
|
mask |= POLLIN | POLLRDNORM;
|
|
|
|
|
|
@@ -1144,7 +1143,7 @@ static int vsock_stream_connect(struct socket *sock, struct sockaddr *addr,
|
|
err = -EALREADY;
|
|
err = -EALREADY;
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
- if ((sk->sk_state == SS_LISTEN) ||
|
|
|
|
|
|
+ if ((sk->sk_state == VSOCK_SS_LISTEN) ||
|
|
vsock_addr_cast(addr, addr_len, &remote_addr) != 0) {
|
|
vsock_addr_cast(addr, addr_len, &remote_addr) != 0) {
|
|
err = -EINVAL;
|
|
err = -EINVAL;
|
|
goto out;
|
|
goto out;
|
|
@@ -1256,7 +1255,7 @@ static int vsock_accept(struct socket *sock, struct socket *newsock, int flags)
|
|
goto out;
|
|
goto out;
|
|
}
|
|
}
|
|
|
|
|
|
- if (listener->sk_state != SS_LISTEN) {
|
|
|
|
|
|
+ if (listener->sk_state != VSOCK_SS_LISTEN) {
|
|
err = -EINVAL;
|
|
err = -EINVAL;
|
|
goto out;
|
|
goto out;
|
|
}
|
|
}
|
|
@@ -1348,7 +1347,7 @@ static int vsock_listen(struct socket *sock, int backlog)
|
|
}
|
|
}
|
|
|
|
|
|
sk->sk_max_ack_backlog = backlog;
|
|
sk->sk_max_ack_backlog = backlog;
|
|
- sk->sk_state = SS_LISTEN;
|
|
|
|
|
|
+ sk->sk_state = VSOCK_SS_LISTEN;
|
|
|
|
|
|
err = 0;
|
|
err = 0;
|
|
|
|
|