xref: /haiku/headers/private/net/net_socket.h (revision 9ecf9d1c1d4888d341a6eac72112c72d1ae3a4cb)
1 /*
2  * Copyright 2006, Haiku, Inc. All Rights Reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef NET_SOCKET_H
6 #define NET_SOCKET_H
7 
8 
9 #include <net_buffer.h>
10 #include <sys/socket.h>
11 
12 
13 #define NET_SOCKET_MODULE_NAME "network/stack/socket/v1"
14 
15 typedef struct net_socket {
16 	struct net_protocol		*first_protocol;
17 	struct net_protocol_module_info *first_info;
18 
19 	int						family;
20 	int						type;
21 	int						protocol;
22 
23 	struct sockaddr_storage	address;
24 	struct sockaddr_storage	peer;
25 
26 	int						options;
27 	int						linger;
28 
29 	struct {
30 		uint32		buffer_size;
31 		uint32		low_water_mark;
32 		bigtime_t	timeout;
33 	}						send, receive;
34 } net_socket;
35 
36 struct net_socket_module_info {
37 	struct module_info info;
38 
39 	status_t	(*socket)(int family, int type, int protocol, net_socket **_socket);
40 	status_t	(*close)(net_socket *socket);
41 	status_t	(*free)(net_socket *socket);
42 
43 	status_t	(*readv)(net_socket *socket, const iovec *vecs, size_t vecCount,
44 					size_t *_length);
45 	status_t	(*writev)(net_socket *socket, const iovec *vecs, size_t vecCount,
46 					size_t *_length);
47 	status_t	(*control)(net_socket *socket, int32 op, void *data, size_t length);
48 
49 	ssize_t		(*read_avail)(net_socket *socket);
50 	ssize_t		(*send_avail)(net_socket *socket);
51 
52 	status_t	(*send_data)(net_socket *socket, net_buffer *buffer);
53 	status_t	(*receive_data)(net_socket *socket, size_t length, uint32 flags,
54 					net_buffer **_buffer);
55 
56 	// standard socket API
57 	int			(*accept)(net_socket *socket, struct sockaddr *address,
58 					socklen_t *_addressLength, net_socket **_acceptedSocket);
59 	int			(*bind)(net_socket *socket, const struct sockaddr *address,
60 					socklen_t addressLength);
61 	int			(*connect)(net_socket *socket, const struct sockaddr *address,
62 					socklen_t addressLength);
63 	int			(*getpeername)(net_socket *socket, struct sockaddr *address,
64 					socklen_t *_addressLength);
65 	int			(*getsockname)(net_socket *socket, struct sockaddr *address,
66 					socklen_t *_addressLength);
67 	int			(*getsockopt)(net_socket *socket, int level, int option,
68 					void *optionValue, int *_optionLength);
69 	int			(*listen)(net_socket *socket, int backlog);
70 	ssize_t		(*recv)(net_socket *socket, void *data, size_t length, int flags);
71 	ssize_t		(*recvfrom)(net_socket *socket, void *data, size_t length, int flags,
72 					struct sockaddr *address, socklen_t *_addressLength);
73 	ssize_t		(*send)(net_socket *socket, const void *data, size_t length, int flags);
74 	ssize_t		(*sendto)(net_socket *socket, const void *data, size_t length,
75 					int flags, const struct sockaddr *address, socklen_t addressLength);
76 	int			(*setsockopt)(net_socket *socket, int level, int option,
77 					const void *optionValue, int optionLength);
78 	int			(*shutdown)(net_socket *socket, int direction);
79 };
80 
81 #endif	// NET_SOCKET_H
82