Skip to content

Commit a792c55

Browse files
committed
Use helper function setsockopt to simplify kernel calls
1 parent 3f6edce commit a792c55

File tree

1 file changed

+22
-17
lines changed

1 file changed

+22
-17
lines changed

main.c

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,62 +17,66 @@ static struct socket *listen_socket;
1717
static struct http_server_param param;
1818
static struct task_struct *http_server;
1919

20+
static inline int setsockopt(struct socket *sock,
21+
int level,
22+
int optname,
23+
int optval)
24+
{
25+
int opt = optval;
26+
return kernel_setsockopt(sock, level, optname, (char *) &opt, sizeof(opt));
27+
}
28+
2029
static int open_listen_socket(ushort port, ushort backlog, struct socket **res)
2130
{
2231
struct socket *sock;
23-
int err, opt;
2432
struct sockaddr_in s;
2533

26-
err = sock_create(PF_INET, SOCK_STREAM, IPPROTO_TCP, &sock);
34+
int err = sock_create(PF_INET, SOCK_STREAM, IPPROTO_TCP, &sock);
2735
if (err < 0) {
2836
printk(KERN_ERR MODULE_NAME ": sock_create() failure, err=%d\n", err);
2937
return err;
3038
}
31-
opt = 1;
32-
err = kernel_setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *) &opt,
33-
sizeof(opt));
39+
40+
err = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, 1);
3441
if (err < 0) {
3542
printk(KERN_ERR MODULE_NAME ": kernel_setsockopt() failure, err=%d\n",
3643
err);
3744
sock_release(sock);
3845
return err;
3946
}
40-
opt = 1;
41-
err = kernel_setsockopt(sock, SOL_TCP, TCP_NODELAY, (char *) &opt,
42-
sizeof(opt));
47+
48+
err = setsockopt(sock, SOL_TCP, TCP_NODELAY, 1);
4349
if (err < 0) {
4450
printk(KERN_ERR MODULE_NAME ": kernel_setsockopt() failure, err=%d\n",
4551
err);
4652
sock_release(sock);
4753
return err;
4854
}
49-
opt = 0;
50-
err =
51-
kernel_setsockopt(sock, SOL_TCP, TCP_CORK, (char *) &opt, sizeof(opt));
55+
56+
err = setsockopt(sock, SOL_TCP, TCP_CORK, 0);
5257
if (err < 0) {
5358
printk(KERN_ERR MODULE_NAME ": kernel_setsockopt() failure, err=%d\n",
5459
err);
5560
sock_release(sock);
5661
return err;
5762
}
58-
opt = 1024 * 1024;
59-
err = kernel_setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *) &opt,
60-
sizeof(opt));
63+
64+
err = setsockopt(sock, SOL_SOCKET, SO_RCVBUF, 1024 * 1024);
6165
if (err < 0) {
6266
printk(KERN_ERR MODULE_NAME ": kernel_setsockopt() failure, err=%d\n",
6367
err);
6468
sock_release(sock);
6569
return err;
6670
}
67-
opt = 1024 * 1024;
68-
err = kernel_setsockopt(sock, SOL_SOCKET, SO_SNDBUF, (char *) &opt,
69-
sizeof(opt));
71+
72+
err = setsockopt(sock, SOL_SOCKET, SO_SNDBUF, 1024 * 1024);
7073
if (err < 0) {
7174
printk(KERN_ERR MODULE_NAME ": kernel_setsockopt() failure, err=%d\n",
7275
err);
7376
sock_release(sock);
7477
return err;
7578
}
79+
7680
memset(&s, 0, sizeof(s));
7781
s.sin_family = AF_INET;
7882
s.sin_addr.s_addr = htonl(INADDR_ANY);
@@ -83,6 +87,7 @@ static int open_listen_socket(ushort port, ushort backlog, struct socket **res)
8387
sock_release(sock);
8488
return err;
8589
}
90+
8691
err = kernel_listen(sock, backlog);
8792
if (err < 0) {
8893
printk(KERN_ERR MODULE_NAME ": kernel_listen() failure, err=%d\n", err);

0 commit comments

Comments
 (0)