mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-29 21:58:20 +00:00
sockfs: support FIONBIO ioctl
This commit is contained in:
@@ -342,7 +342,7 @@ static int localsock_send(socket_t *socket, sockdesc_t *sockdesc) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (sockdesc->flags & V_FFLAGS_NONBLOCKING) {
|
||||
if (socket_nonblocking(socket, sockdesc->flags)) {
|
||||
error = EAGAIN;
|
||||
poll_leave(&desc);
|
||||
poll_destroydesc(&desc);
|
||||
@@ -433,7 +433,7 @@ static int localsock_recv(socket_t *socket, sockdesc_t *sockdesc) {
|
||||
}
|
||||
}
|
||||
|
||||
if (flags & V_FFLAGS_NONBLOCKING) {
|
||||
if (socket_nonblocking(socket, flags)) {
|
||||
error = EAGAIN;
|
||||
poll_leave(&desc);
|
||||
poll_destroydesc(&desc);
|
||||
@@ -549,7 +549,7 @@ static int localsock_accept(socket_t *_server, socket_t *_clientconnection, sock
|
||||
break;
|
||||
}
|
||||
|
||||
if (flags & V_FFLAGS_NONBLOCKING) {
|
||||
if (socket_nonblocking(&server->socket, flags)) {
|
||||
error = EAGAIN;
|
||||
poll_leave(&desc);
|
||||
poll_destroydesc(&desc);
|
||||
@@ -664,7 +664,7 @@ static int localsock_connect(socket_t *socket, sockaddr_t *addr, uintmax_t flags
|
||||
break;
|
||||
}
|
||||
|
||||
if (flags & V_FFLAGS_NONBLOCKING) {
|
||||
if (socket_nonblocking(socket, flags)) {
|
||||
error = EAGAIN;
|
||||
poll_leave(&desc);
|
||||
poll_destroydesc(&desc);
|
||||
@@ -722,7 +722,7 @@ static int localsock_connect(socket_t *socket, sockaddr_t *addr, uintmax_t flags
|
||||
|
||||
// if nonblocking, return success. the userspace/whatever will
|
||||
// poll() the client to know when they can send data or if the server gave up and closed
|
||||
if (flags & V_FFLAGS_NONBLOCKING) {
|
||||
if (socket_nonblocking(socket, flags)) {
|
||||
error = 0;
|
||||
goto leave;
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ socket_t *socket_create(int type) {
|
||||
socket->state = SOCKET_STATE_UNBOUND;
|
||||
MUTEX_INIT(&socket->mutex);
|
||||
socket->type = type;
|
||||
socket->nonblocking = false;
|
||||
|
||||
return socket;
|
||||
}
|
||||
|
||||
@@ -1294,7 +1294,7 @@ static int tcp_send(socket_t *socket, sockdesc_t *sockdesc) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (revents & V_FFLAGS_NONBLOCKING) {
|
||||
if (socket_nonblocking(socket, sockdesc->flags)) {
|
||||
poll_leave(&polldesc);
|
||||
poll_destroydesc(&polldesc);
|
||||
error = EAGAIN;
|
||||
@@ -1374,7 +1374,7 @@ static int tcp_recv(socket_t *socket, sockdesc_t *sockdesc) {
|
||||
}
|
||||
}
|
||||
|
||||
if (flags & V_FFLAGS_NONBLOCKING) {
|
||||
if (socket_nonblocking(socket, flags)) {
|
||||
error = EAGAIN;
|
||||
poll_leave(&desc);
|
||||
poll_destroydesc(&desc);
|
||||
@@ -1587,7 +1587,7 @@ static int tcp_connect(socket_t *socket, sockaddr_t *addr, uintmax_t flags, cred
|
||||
tcpsocket->tcb = tcb;
|
||||
}
|
||||
|
||||
if (flags & V_FFLAGS_NONBLOCKING) {
|
||||
if (socket_nonblocking(socket, flags)) {
|
||||
error = EINPROGRESS;
|
||||
goto cleanup;
|
||||
}
|
||||
@@ -1707,7 +1707,7 @@ static int tcp_accept(socket_t *server, socket_t *client, sockaddr_t *addr, uint
|
||||
break;
|
||||
}
|
||||
|
||||
if (flags & V_FFLAGS_NONBLOCKING) {
|
||||
if (socket_nonblocking(server, flags)) {
|
||||
error = EAGAIN;
|
||||
poll_leave(&desc);
|
||||
poll_destroydesc(&desc);
|
||||
|
||||
@@ -242,7 +242,7 @@ static int udp_recv(socket_t *socket, sockdesc_t *sockdesc) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (flags & V_FFLAGS_NONBLOCKING) {
|
||||
if (socket_nonblocking(socket, flags)) {
|
||||
e = EAGAIN;
|
||||
poll_leave(&desc);
|
||||
poll_destroydesc(&desc);
|
||||
|
||||
Reference in New Issue
Block a user