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