btrfs: [] on the end of a struct field is a variable length array.
[haiku.git] / headers / private / net / net_socket.h
blobaf6a85e9717e22a49441afea0677bbc8c710a503
1 /*
2 * Copyright 2006-2010, 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
9 #include <net_buffer.h>
10 #include <sys/socket.h>
12 #include <lock.h>
15 struct net_stat;
16 struct selectsync;
19 #define NET_SOCKET_MODULE_NAME "network/stack/socket/v1"
22 typedef struct net_socket {
23 struct net_protocol* first_protocol;
24 struct net_protocol_module_info* first_info;
26 int family;
27 int type;
28 int protocol;
30 struct sockaddr_storage address;
31 struct sockaddr_storage peer;
33 int options;
34 int linger;
35 uint32 bound_to_device;
37 struct {
38 uint32 buffer_size;
39 uint32 low_water_mark;
40 bigtime_t timeout;
41 } send, receive;
43 status_t error;
44 } net_socket;
47 struct net_socket_module_info {
48 struct module_info info;
50 status_t (*open_socket)(int family, int type, int protocol,
51 net_socket** _socket);
52 status_t (*close)(net_socket* socket);
53 void (*free)(net_socket* socket);
55 status_t (*readv)(net_socket* socket, const iovec* vecs,
56 size_t vecCount, size_t* _length);
57 status_t (*writev)(net_socket* socket, const iovec* vecs,
58 size_t vecCount, size_t* _length);
59 status_t (*control)(net_socket* socket, uint32 op, void* data,
60 size_t length);
62 ssize_t (*read_avail)(net_socket* socket);
63 ssize_t (*send_avail)(net_socket* socket);
65 status_t (*send_data)(net_socket* socket, net_buffer* buffer);
66 status_t (*receive_data)(net_socket* socket, size_t length,
67 uint32 flags, net_buffer** _buffer);
69 status_t (*get_option)(net_socket* socket, int level, int option,
70 void* value, int* _length);
71 status_t (*set_option)(net_socket* socket, int level, int option,
72 const void* value, int length);
74 status_t (*get_next_stat)(uint32* cookie, int family,
75 struct net_stat* stat);
77 // connections
78 bool (*acquire_socket)(net_socket* socket);
79 bool (*release_socket)(net_socket* socket);
81 status_t (*spawn_pending_socket)(net_socket* parent,
82 net_socket** _socket);
83 status_t (*dequeue_connected)(net_socket* parent, net_socket** _socket);
84 ssize_t (*count_connected)(net_socket* parent);
85 status_t (*set_max_backlog)(net_socket* socket, uint32 backlog);
86 bool (*has_parent)(net_socket* socket);
87 status_t (*set_connected)(net_socket* socket);
88 status_t (*set_aborted)(net_socket* socket);
90 // notifications
91 status_t (*request_notification)(net_socket* socket, uint8 event,
92 struct selectsync* sync);
93 status_t (*cancel_notification)(net_socket* socket, uint8 event,
94 struct selectsync* sync);
95 status_t (*notify)(net_socket* socket, uint8 event, int32 value);
97 // standard socket API
98 int (*accept)(net_socket* socket, struct sockaddr* address,
99 socklen_t* _addressLength, net_socket** _acceptedSocket);
100 int (*bind)(net_socket* socket, const struct sockaddr* address,
101 socklen_t addressLength);
102 int (*connect)(net_socket* socket, const struct sockaddr* address,
103 socklen_t addressLength);
104 int (*getpeername)(net_socket* socket, struct sockaddr* address,
105 socklen_t* _addressLength);
106 int (*getsockname)(net_socket* socket, struct sockaddr* address,
107 socklen_t* _addressLength);
108 int (*getsockopt)(net_socket* socket, int level, int option,
109 void* optionValue, int* _optionLength);
110 int (*listen)(net_socket* socket, int backlog);
111 ssize_t (*receive)(net_socket* socket, struct msghdr* , void* data,
112 size_t length, int flags);
113 ssize_t (*send)(net_socket* socket, struct msghdr* , const void* data,
114 size_t length, int flags);
115 int (*setsockopt)(net_socket* socket, int level, int option,
116 const void* optionValue, int optionLength);
117 int (*shutdown)(net_socket* socket, int direction);
118 status_t (*socketpair)(int family, int type, int protocol,
119 net_socket* _sockets[2]);
123 #endif // NET_SOCKET_H