d19606eb0c
For consistency with net_accept(), which necessarily uses a server socket, name the net_listen() parameter "server_socket".
97 lines
2.2 KiB
C
97 lines
2.2 KiB
C
#include "net_intr.h"
|
|
|
|
bool
|
|
net_connect_intr(struct sc_intr *intr, sc_socket socket, uint32_t addr,
|
|
uint16_t port) {
|
|
if (!sc_intr_set_socket(intr, socket)) {
|
|
// Already interrupted
|
|
return false;
|
|
}
|
|
|
|
bool ret = net_connect(socket, addr, port);
|
|
|
|
sc_intr_set_socket(intr, SC_SOCKET_NONE);
|
|
return ret;
|
|
}
|
|
|
|
bool
|
|
net_listen_intr(struct sc_intr *intr, sc_socket server_socket, uint32_t addr,
|
|
uint16_t port, int backlog) {
|
|
if (!sc_intr_set_socket(intr, server_socket)) {
|
|
// Already interrupted
|
|
return false;
|
|
}
|
|
|
|
bool ret = net_listen(server_socket, addr, port, backlog);
|
|
|
|
sc_intr_set_socket(intr, SC_SOCKET_NONE);
|
|
return ret;
|
|
}
|
|
|
|
sc_socket
|
|
net_accept_intr(struct sc_intr *intr, sc_socket server_socket) {
|
|
if (!sc_intr_set_socket(intr, server_socket)) {
|
|
// Already interrupted
|
|
return SC_SOCKET_NONE;
|
|
}
|
|
|
|
sc_socket socket = net_accept(server_socket);
|
|
|
|
sc_intr_set_socket(intr, SC_SOCKET_NONE);
|
|
return socket;
|
|
}
|
|
|
|
ssize_t
|
|
net_recv_intr(struct sc_intr *intr, sc_socket socket, void *buf, size_t len) {
|
|
if (!sc_intr_set_socket(intr, socket)) {
|
|
// Already interrupted
|
|
return -1;
|
|
}
|
|
|
|
ssize_t r = net_recv(socket, buf, len);
|
|
|
|
sc_intr_set_socket(intr, SC_SOCKET_NONE);
|
|
return r;
|
|
}
|
|
|
|
ssize_t
|
|
net_recv_all_intr(struct sc_intr *intr, sc_socket socket, void *buf,
|
|
size_t len) {
|
|
if (!sc_intr_set_socket(intr, socket)) {
|
|
// Already interrupted
|
|
return -1;
|
|
}
|
|
|
|
ssize_t r = net_recv_all(socket, buf, len);
|
|
|
|
sc_intr_set_socket(intr, SC_SOCKET_NONE);
|
|
return r;
|
|
}
|
|
|
|
ssize_t
|
|
net_send_intr(struct sc_intr *intr, sc_socket socket, const void *buf,
|
|
size_t len) {
|
|
if (!sc_intr_set_socket(intr, socket)) {
|
|
// Already interrupted
|
|
return -1;
|
|
}
|
|
|
|
ssize_t w = net_send(socket, buf, len);
|
|
|
|
sc_intr_set_socket(intr, SC_SOCKET_NONE);
|
|
return w;
|
|
}
|
|
|
|
ssize_t
|
|
net_send_all_intr(struct sc_intr *intr, sc_socket socket, const void *buf,
|
|
size_t len) {
|
|
if (!sc_intr_set_socket(intr, socket)) {
|
|
// Already interrupted
|
|
return -1;
|
|
}
|
|
|
|
ssize_t w = net_send_all(socket, buf, len);
|
|
|
|
sc_intr_set_socket(intr, SC_SOCKET_NONE);
|
|
return w;
|
|
}
|