2 ** Copyright 2002, Travis Geiselbrecht. All rights reserved.
3 ** Distributed under the terms of the NewOS License.
5 #include <socket/socket.h>
7 #include <sys/syscalls.h>
9 int socket_create(int proto
, int flags
)
13 _socket_api_args_t args
;
15 fd
= open("/dev/net/socket", 0);
19 args
.u
.create
.type
= proto
;
20 args
.u
.create
.flags
= flags
;
22 err
= sys_ioctl(fd
, _SOCKET_API_CREATE
, &args
, sizeof(args
));
31 int socket_close(int fd
)
36 int socket_bind(int fd
, sockaddr
*addr
)
38 _socket_api_args_t args
;
40 args
.u
.bind
.saddr
= addr
;
41 return sys_ioctl(fd
, _SOCKET_API_BIND
, &args
, sizeof(args
));
44 int socket_connect(int fd
, sockaddr
*addr
)
46 _socket_api_args_t args
;
48 args
.u
.connect
.saddr
= addr
;
49 return sys_ioctl(fd
, _SOCKET_API_CONNECT
, &args
, sizeof(args
));
52 int socket_listen(int fd
)
54 return sys_ioctl(fd
, _SOCKET_API_LISTEN
, NULL
, 0);
57 int socket_accept(int fd
, sockaddr
*addr
)
59 _socket_api_args_t args
;
61 args
.u
.accept
.saddr
= addr
;
62 return sys_ioctl(fd
, _SOCKET_API_ACCEPT
, &args
, sizeof(args
));
65 ssize_t
socket_read(int fd
, void *buf
, ssize_t len
)
67 return read(fd
, buf
, len
);
70 ssize_t
socket_write(int fd
, const void *buf
, ssize_t len
)
72 return write(fd
, buf
, len
);
75 ssize_t
socket_recvfrom(int fd
, void *buf
, ssize_t len
, sockaddr
*addr
)
77 _socket_api_args_t args
;
79 args
.u
.transfer
.buf
= buf
;
80 args
.u
.transfer
.len
= len
;
81 args
.u
.transfer
.flags
= 0;
82 args
.u
.transfer
.saddr
= addr
;
83 args
.u
.transfer
.timeout
= 0;
85 return sys_ioctl(fd
, _SOCKET_API_RECVFROM
, &args
, sizeof(args
));
88 ssize_t
socket_recvfrom_etc(int fd
, void *buf
, ssize_t len
, sockaddr
*addr
, int flags
, bigtime_t timeout
)
90 _socket_api_args_t args
;
92 args
.u
.transfer
.buf
= buf
;
93 args
.u
.transfer
.len
= len
;
94 args
.u
.transfer
.flags
= flags
;
95 args
.u
.transfer
.saddr
= addr
;
96 args
.u
.transfer
.timeout
= timeout
;
98 return sys_ioctl(fd
, _SOCKET_API_RECVFROM_ETC
, &args
, sizeof(args
));
101 ssize_t
socket_sendto(int fd
, const void *buf
, ssize_t len
, sockaddr
*addr
)
103 _socket_api_args_t args
;
105 args
.u
.transfer
.buf
= (void *)buf
;
106 args
.u
.transfer
.len
= len
;
107 args
.u
.transfer
.flags
= 0;
108 args
.u
.transfer
.saddr
= addr
;
109 args
.u
.transfer
.timeout
= 0;
111 return sys_ioctl(fd
, _SOCKET_API_SENDTO
, &args
, sizeof(args
));