1 /* $NetBSD: socket.h,v 1.65 2001/10/22 20:59:04 kleink Exp $ */ 2 3 /* 4 * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. Neither the name of the project nor the names of its contributors 16 * may be used to endorse or promote products derived from this software 17 * without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 * SUCH DAMAGE. 30 */ 31 32 /* 33 * Copyright (c) 1982, 1985, 1986, 1988, 1993, 1994 34 * The Regents of the University of California. All rights reserved. 35 * 36 * Redistribution and use in source and binary forms, with or without 37 * modification, are permitted provided that the following conditions 38 * are met: 39 * 1. Redistributions of source code must retain the above copyright 40 * notice, this list of conditions and the following disclaimer. 41 * 2. Redistributions in binary form must reproduce the above copyright 42 * notice, this list of conditions and the following disclaimer in the 43 * documentation and/or other materials provided with the distribution. 44 * 3. All advertising materials mentioning features or use of this software 45 * must display the following acknowledgement: 46 * This product includes software developed by the University of 47 * California, Berkeley and its contributors. 48 * 4. Neither the name of the University nor the names of its contributors 49 * may be used to endorse or promote products derived from this software 50 * without specific prior written permission. 51 * 52 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 53 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 54 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 55 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 56 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 57 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 58 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 59 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 60 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 61 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 62 * SUCH DAMAGE. 63 * 64 * @(#)socket.h 8.6 (Berkeley) 5/3/95 65 */ 66 67 #ifndef _SYS_SOCKET_H_ 68 #define _SYS_SOCKET_H_ 69 70 /* 71 * Definitions related to sockets: types, address families, options. 72 */ 73 74 /* 75 * Data types. 76 */ 77 #include <sys/ansi.h> 78 79 #ifndef sa_family_t 80 typedef __sa_family_t sa_family_t; 81 #define sa_family_t __sa_family_t 82 #endif 83 84 #ifndef socklen_t 85 typedef __socklen_t socklen_t; 86 #define socklen_t __socklen_t 87 #endif 88 89 #include <machine/ansi.h> 90 91 #ifdef _BSD_SIZE_T_ 92 typedef _BSD_SIZE_T_ size_t; 93 #undef _BSD_SIZE_T_ 94 #endif 95 96 #ifdef _BSD_SSIZE_T_ 97 typedef _BSD_SSIZE_T_ ssize_t; 98 #undef _BSD_SSIZE_T_ 99 #endif 100 101 #include <sys/uio.h> 102 103 /* 104 * Socket types. 105 */ 106 #define SOCK_STREAM 1 /* stream socket */ 107 #define SOCK_DGRAM 2 /* datagram socket */ 108 #define SOCK_RAW 3 /* raw-protocol interface */ 109 #define SOCK_RDM 4 /* reliably-delivered message */ 110 #define SOCK_SEQPACKET 5 /* sequenced packet stream */ 111 112 /* 113 * Option flags per-socket. 114 */ 115 #define SO_DEBUG 0x0001 /* turn on debugging info recording */ 116 #define SO_ACCEPTCONN 0x0002 /* socket has had listen() */ 117 #define SO_REUSEADDR 0x0004 /* allow local address reuse */ 118 #define SO_KEEPALIVE 0x0008 /* keep connections alive */ 119 #define SO_DONTROUTE 0x0010 /* just use interface addresses */ 120 #define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */ 121 #define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */ 122 #define SO_LINGER 0x0080 /* linger on close if data present */ 123 #define SO_OOBINLINE 0x0100 /* leave received OOB data in line */ 124 #define SO_REUSEPORT 0x0200 /* allow local address & port reuse */ 125 #define SO_TIMESTAMP 0x0400 /* timestamp received dgram traffic */ 126 127 /* 128 * Additional options, not kept in so_options. 129 */ 130 #define SO_SNDBUF 0x1001 /* send buffer size */ 131 #define SO_RCVBUF 0x1002 /* receive buffer size */ 132 #define SO_SNDLOWAT 0x1003 /* send low-water mark */ 133 #define SO_RCVLOWAT 0x1004 /* receive low-water mark */ 134 #define SO_SNDTIMEO 0x1005 /* send timeout */ 135 #define SO_RCVTIMEO 0x1006 /* receive timeout */ 136 #define SO_ERROR 0x1007 /* get error status and clear */ 137 #define SO_TYPE 0x1008 /* get socket type */ 138 139 /* 140 * Structure used for manipulating linger option. 141 */ 142 struct linger { 143 int l_onoff; /* option on/off */ 144 int l_linger; /* linger time in seconds */ 145 }; 146 147 /* 148 * Level number for (get/set)sockopt() to apply to socket itself. 149 */ 150 #define SOL_SOCKET 0xffff /* options for socket level */ 151 152 /* 153 * Address families. 154 */ 155 #define AF_UNSPEC 0 /* unspecified */ 156 #define AF_LOCAL 1 /* local to host (pipes, portals) */ 157 #define AF_UNIX AF_LOCAL /* backward compatibility */ 158 #define AF_INET 2 /* internetwork: UDP, TCP, etc. */ 159 #define AF_IMPLINK 3 /* arpanet imp addresses */ 160 #define AF_PUP 4 /* pup protocols: e.g. BSP */ 161 #define AF_CHAOS 5 /* mit CHAOS protocols */ 162 #define AF_NS 6 /* XEROX NS protocols */ 163 #define AF_ISO 7 /* ISO protocols */ 164 #define AF_OSI AF_ISO 165 #define AF_ECMA 8 /* european computer manufacturers */ 166 #define AF_DATAKIT 9 /* datakit protocols */ 167 #define AF_CCITT 10 /* CCITT protocols, X.25 etc */ 168 #define AF_SNA 11 /* IBM SNA */ 169 #define AF_DECnet 12 /* DECnet */ 170 #define AF_DLI 13 /* DEC Direct data link interface */ 171 #define AF_LAT 14 /* LAT */ 172 #define AF_HYLINK 15 /* NSC Hyperchannel */ 173 #define AF_APPLETALK 16 /* Apple Talk */ 174 #define AF_ROUTE 17 /* Internal Routing Protocol */ 175 #define AF_LINK 18 /* Link layer interface */ 176 #if !defined(_XOPEN_SOURCE) 177 #define pseudo_AF_XTP 19 /* eXpress Transfer Protocol (no AF) */ 178 #endif 179 #define AF_COIP 20 /* connection-oriented IP, aka ST II */ 180 #define AF_CNT 21 /* Computer Network Technology */ 181 #if !defined(_XOPEN_SOURCE) 182 #define pseudo_AF_RTIP 22 /* Help Identify RTIP packets */ 183 #endif 184 #define AF_IPX 23 /* Novell Internet Protocol */ 185 #define AF_INET6 24 /* IP version 6 */ 186 #if !defined(_XOPEN_SOURCE) 187 #define pseudo_AF_PIP 25 /* Help Identify PIP packets */ 188 #endif 189 #define AF_ISDN 26 /* Integrated Services Digital Network*/ 190 #define AF_E164 AF_ISDN /* CCITT E.164 recommendation */ 191 #define AF_NATM 27 /* native ATM access */ 192 #define AF_ARP 28 /* (rev.) addr. res. prot. (RFC 826) */ 193 #if !defined(_XOPEN_SOURCE) 194 #define pseudo_AF_KEY 29 /* Internal key management protocol */ 195 #define pseudo_AF_HDRCMPLT 30 /* Used by BPF to not rewrite hdrs 196 in interface output routine */ 197 #endif 198 199 #define AF_MAX 31 200 201 /* 202 * Structure used by kernel to store most 203 * addresses. 204 */ 205 struct sockaddr { 206 __uint8_t sa_len; /* total length */ 207 sa_family_t sa_family; /* address family */ 208 char sa_data[14]; /* actually longer; address value */ 209 }; 210 211 #if defined(_KERNEL) 212 /* 213 * Structure used by kernel to pass protocol 214 * information in raw sockets. 215 */ 216 struct sockproto { 217 u_short sp_family; /* address family */ 218 u_short sp_protocol; /* protocol */ 219 }; 220 #endif /* _KERNEL */ 221 222 #if 1 223 /* 224 * RFC 2553: protocol-independent placeholder for socket addresses 225 */ 226 #define _SS_MAXSIZE 128 227 #define _SS_ALIGNSIZE (sizeof(__int64_t)) 228 #define _SS_PAD1SIZE (_SS_ALIGNSIZE - 2) 229 #define _SS_PAD2SIZE (_SS_MAXSIZE - 2 - \ 230 _SS_PAD1SIZE - _SS_ALIGNSIZE) 231 232 #if !defined(_XOPEN_SOURCE) || (_XOPEN_SOURCE - 0) >= 500 233 struct sockaddr_storage { 234 __uint8_t ss_len; /* address length */ 235 sa_family_t ss_family; /* address family */ 236 char __ss_pad1[_SS_PAD1SIZE]; 237 __int64_t __ss_align;/* force desired structure storage alignment */ 238 char __ss_pad2[_SS_PAD2SIZE]; 239 }; 240 #endif /* !_XOPEN_SOURCE || ... */ 241 #endif /* 1 */ 242 243 /* 244 * Protocol families, same as address families for now. 245 */ 246 #define PF_UNSPEC AF_UNSPEC 247 #define PF_LOCAL AF_LOCAL 248 #define PF_UNIX PF_LOCAL /* backward compatibility */ 249 #define PF_INET AF_INET 250 #define PF_IMPLINK AF_IMPLINK 251 #define PF_PUP AF_PUP 252 #define PF_CHAOS AF_CHAOS 253 #define PF_NS AF_NS 254 #define PF_ISO AF_ISO 255 #define PF_OSI AF_ISO 256 #define PF_ECMA AF_ECMA 257 #define PF_DATAKIT AF_DATAKIT 258 #define PF_CCITT AF_CCITT 259 #define PF_SNA AF_SNA 260 #define PF_DECnet AF_DECnet 261 #define PF_DLI AF_DLI 262 #define PF_LAT AF_LAT 263 #define PF_HYLINK AF_HYLINK 264 #define PF_APPLETALK AF_APPLETALK 265 #define PF_ROUTE AF_ROUTE 266 #define PF_LINK AF_LINK 267 #if !defined(_XOPEN_SOURCE) 268 #define PF_XTP pseudo_AF_XTP /* really just proto family, no AF */ 269 #endif 270 #define PF_COIP AF_COIP 271 #define PF_CNT AF_CNT 272 #define PF_INET6 AF_INET6 273 #define PF_IPX AF_IPX /* same format as AF_NS */ 274 #if !defined(_XOPEN_SOURCE) 275 #define PF_RTIP pseudo_AF_FTIP /* same format as AF_INET */ 276 #define PF_PIP pseudo_AF_PIP 277 #endif 278 #define PF_ISDN AF_ISDN /* same as E164 */ 279 #define PF_E164 AF_E164 280 #define PF_NATM AF_NATM 281 #define PF_ARP AF_ARP 282 #if !defined(_XOPEN_SOURCE) 283 #define PF_KEY pseudo_AF_KEY /* like PF_ROUTE, only for key mgmt */ 284 #endif 285 286 #define PF_MAX AF_MAX 287 288 #if !defined(_XOPEN_SOURCE) 289 290 #ifndef gid_t 291 typedef __gid_t gid_t; /* group id */ 292 #define gid_t __gid_t 293 #endif 294 295 #ifndef uid_t 296 typedef __uid_t uid_t; /* user id */ 297 #define uid_t __uid_t 298 #endif 299 300 /* 301 * Socket credentials. 302 */ 303 struct sockcred { 304 uid_t sc_uid; /* real user id */ 305 uid_t sc_euid; /* effective user id */ 306 gid_t sc_gid; /* real group id */ 307 gid_t sc_egid; /* effective group id */ 308 int sc_ngroups; /* number of supplemental groups */ 309 gid_t sc_groups[1]; /* variable length */ 310 }; 311 312 /* 313 * Compute size of a sockcred structure with groups. 314 */ 315 #define SOCKCREDSIZE(ngrps) \ 316 (sizeof(struct sockcred) + (sizeof(gid_t) * ((ngrps) - 1))) 317 #endif /* !_XOPEN_SOURCE */ 318 319 320 #if !defined(_XOPEN_SOURCE) 321 /* 322 * Definitions for network related sysctl, CTL_NET. 323 * 324 * Second level is protocol family. 325 * Third level is protocol number. 326 * 327 * Further levels are defined by the individual families below. 328 */ 329 #define NET_MAXID AF_MAX 330 331 #define CTL_NET_NAMES { \ 332 { 0, 0 }, \ 333 { "local", CTLTYPE_NODE }, \ 334 { "inet", CTLTYPE_NODE }, \ 335 { "implink", CTLTYPE_NODE }, \ 336 { "pup", CTLTYPE_NODE }, \ 337 { "chaos", CTLTYPE_NODE }, \ 338 { "xerox_ns", CTLTYPE_NODE }, \ 339 { "iso", CTLTYPE_NODE }, \ 340 { "emca", CTLTYPE_NODE }, \ 341 { "datakit", CTLTYPE_NODE }, \ 342 { "ccitt", CTLTYPE_NODE }, \ 343 { "ibm_sna", CTLTYPE_NODE }, \ 344 { "decnet", CTLTYPE_NODE }, \ 345 { "dec_dli", CTLTYPE_NODE }, \ 346 { "lat", CTLTYPE_NODE }, \ 347 { "hylink", CTLTYPE_NODE }, \ 348 { "appletalk", CTLTYPE_NODE }, \ 349 { "route", CTLTYPE_NODE }, \ 350 { "link_layer", CTLTYPE_NODE }, \ 351 { "xtp", CTLTYPE_NODE }, \ 352 { "coip", CTLTYPE_NODE }, \ 353 { "cnt", CTLTYPE_NODE }, \ 354 { "rtip", CTLTYPE_NODE }, \ 355 { "ipx", CTLTYPE_NODE }, \ 356 { "inet6", CTLTYPE_NODE }, \ 357 { "pip", CTLTYPE_NODE }, \ 358 { "isdn", CTLTYPE_NODE }, \ 359 { "natm", CTLTYPE_NODE }, \ 360 { "arp", CTLTYPE_NODE }, \ 361 { "key", CTLTYPE_NODE }, \ 362 } 363 #endif /* !_XOPEN_SOURCE */ 364 365 #if !defined(_XOPEN_SOURCE) 366 /* 367 * PF_ROUTE - Routing table 368 * 369 * Three additional levels are defined: 370 * Fourth: address family, 0 is wildcard 371 * Fifth: type of info, defined below 372 * Sixth: flag(s) to mask with for NET_RT_FLAGS 373 */ 374 #define NET_RT_DUMP 1 /* dump; may limit to a.f. */ 375 #define NET_RT_FLAGS 2 /* by flags, e.g. RESOLVING */ 376 #define NET_RT_OIFLIST 3 /* old NET_RT_IFLIST (pre 1.5) */ 377 #define NET_RT_IFLIST 4 /* survey interface list */ 378 #define NET_RT_MAXID 5 379 380 #define CTL_NET_RT_NAMES { \ 381 { 0, 0 }, \ 382 { "dump", CTLTYPE_STRUCT }, \ 383 { "flags", CTLTYPE_STRUCT }, \ 384 { 0, 0 }, \ 385 { "iflist", CTLTYPE_STRUCT }, \ 386 } 387 #endif /* !_XOPEN_SOURCE */ 388 389 /* 390 * Maximum queue length specifiable by listen(2). 391 */ 392 393 #define SOMAXCONN 128 394 395 /* 396 * Message header for recvmsg and sendmsg calls. 397 * Used value-result for recvmsg, value only for sendmsg. 398 */ 399 struct msghdr { 400 void *msg_name; /* optional address */ 401 socklen_t msg_namelen; /* size of address */ 402 struct iovec *msg_iov; /* scatter/gather array */ 403 int msg_iovlen; /* # elements in msg_iov */ 404 void *msg_control; /* ancillary data, see below */ 405 socklen_t msg_controllen; /* ancillary data buffer len */ 406 int msg_flags; /* flags on received message */ 407 }; 408 409 #define MSG_OOB 0x1 /* process out-of-band data */ 410 #define MSG_PEEK 0x2 /* peek at incoming message */ 411 #define MSG_DONTROUTE 0x4 /* send without using routing tables */ 412 #define MSG_EOR 0x8 /* data completes record */ 413 #define MSG_TRUNC 0x10 /* data discarded before delivery */ 414 #define MSG_CTRUNC 0x20 /* control data lost before delivery */ 415 #define MSG_WAITALL 0x40 /* wait for full request or error */ 416 #define MSG_DONTWAIT 0x80 /* this message should be nonblocking */ 417 #define MSG_BCAST 0x100 /* this message was rcvd using link-level brdcst */ 418 #define MSG_MCAST 0x200 /* this message was rcvd using link-level mcast */ 419 420 /* 421 * Header for ancillary data objects in msg_control buffer. 422 * Used for additional information with/about a datagram 423 * not expressible by flags. The format is a sequence 424 * of message elements headed by cmsghdr structures. 425 */ 426 struct cmsghdr { 427 socklen_t cmsg_len; /* data byte count, including hdr */ 428 int cmsg_level; /* originating protocol */ 429 int cmsg_type; /* protocol-specific type */ 430 /* followed by u_char cmsg_data[]; */ 431 }; 432 433 /* given pointer to struct cmsghdr, return pointer to data */ 434 #define CMSG_DATA(cmsg) \ 435 ((u_char *)(void *)(cmsg) + __CMSG_ALIGN(sizeof(struct cmsghdr))) 436 437 /* 438 * Alignment requirement for CMSG struct manipulation. 439 * This basically behaves the same as ALIGN() ARCH/include/param.h. 440 * We declare it separately for two reasons: 441 * (1) avoid dependency between machine/param.h, and (2) to sync with kernel's 442 * idea of ALIGNBYTES at runtime. 443 * without (2), we can't guarantee binary compatibility in case of future 444 * changes in ALIGNBYTES. 445 */ 446 #define __CMSG_ALIGN(n) (((n) + __cmsg_alignbytes()) & ~__cmsg_alignbytes()) 447 #ifdef _KERNEL 448 #define CMSG_ALIGN(n) __CMSG_ALIGN(n) 449 #endif 450 451 /* given pointer to struct cmsghdr, return pointer to next cmsghdr */ 452 #define CMSG_NXTHDR(mhdr, cmsg) \ 453 (((__caddr_t)(cmsg) + __CMSG_ALIGN((cmsg)->cmsg_len) + \ 454 __CMSG_ALIGN(sizeof(struct cmsghdr)) > \ 455 (((__caddr_t)(mhdr)->msg_control) + (mhdr)->msg_controllen)) ? \ 456 (struct cmsghdr *)NULL : \ 457 (struct cmsghdr *)((__caddr_t)(cmsg) + \ 458 __CMSG_ALIGN((cmsg)->cmsg_len))) 459 460 /* 461 * RFC 2292 requires to check msg_controllen, in case that the kernel returns 462 * an empty list for some reasons. 463 */ 464 #define CMSG_FIRSTHDR(mhdr) \ 465 ((mhdr)->msg_controllen >= sizeof(struct cmsghdr) ? \ 466 (struct cmsghdr *)(mhdr)->msg_control : \ 467 (struct cmsghdr *)NULL) 468 469 #define CMSG_SPACE(l) (__CMSG_ALIGN(sizeof(struct cmsghdr)) + __CMSG_ALIGN(l)) 470 #define CMSG_LEN(l) (__CMSG_ALIGN(sizeof(struct cmsghdr)) + (l)) 471 472 /* "Socket"-level control message types: */ 473 #define SCM_RIGHTS 0x01 /* access rights (array of int) */ 474 #if !defined(_XOPEN_SOURCE) 475 #define SCM_TIMESTAMP 0x02 /* timestamp (struct timeval) */ 476 #define SCM_CREDS 0x04 /* credentials (struct sockcred) */ 477 #endif 478 479 /* 480 * Types of socket shutdown(2). 481 */ 482 #define SHUT_RD 0 /* Disallow further receives. */ 483 #define SHUT_WR 1 /* Disallow further sends. */ 484 #define SHUT_RDWR 2 /* Disallow further sends/receives. */ 485 486 #if !defined(_XOPEN_SOURCE) 487 /* 488 * 4.3 compat sockaddr, move to compat file later 489 */ 490 struct osockaddr { 491 __uint16_t sa_family; /* address family */ 492 char sa_data[14]; /* up to 14 bytes of direct address */ 493 }; 494 495 /* 496 * 4.3-compat message header (move to compat file later). 497 */ 498 struct omsghdr { 499 __caddr_t msg_name; /* optional address */ 500 int msg_namelen; /* size of address */ 501 struct iovec *msg_iov; /* scatter/gather array */ 502 int msg_iovlen; /* # elements in msg_iov */ 503 __caddr_t msg_accrights; /* access rights sent/received */ 504 int msg_accrightslen; 505 }; 506 #endif 507 508 #include <sys/cdefs.h> 509 510 __BEGIN_DECLS 511 int __cmsg_alignbytes __P((void)); 512 __END_DECLS 513 514 #ifndef _KERNEL 515 516 __BEGIN_DECLS 517 int accept __P((int, struct sockaddr * __restrict, socklen_t * __restrict)); 518 int bind __P((int, const struct sockaddr *, socklen_t)); 519 int connect __P((int, const struct sockaddr *, socklen_t)); 520 int getpeername __P((int, struct sockaddr * __restrict, 521 socklen_t * __restrict)); 522 int getsockname __P((int, struct sockaddr * __restrict, 523 socklen_t * __restrict)); 524 int getsockopt __P((int, int, int, void * __restrict, 525 socklen_t * __restrict)); 526 int listen __P((int, int)); 527 ssize_t recv __P((int, void *, size_t, int)); 528 ssize_t recvfrom __P((int, void * __restrict, size_t, int, 529 struct sockaddr * __restrict, socklen_t * __restrict)); 530 ssize_t recvmsg __P((int, struct msghdr *, int)); 531 ssize_t send __P((int, const void *, size_t, int)); 532 ssize_t sendto __P((int, const void *, 533 size_t, int, const struct sockaddr *, socklen_t)); 534 ssize_t sendmsg __P((int, const struct msghdr *, int)); 535 int setsockopt __P((int, int, int, const void *, socklen_t)); 536 int shutdown __P((int, int)); 537 int sockatmark __P((int)); 538 int socket __P((int, int, int)); 539 int socketpair __P((int, int, int, int *)); 540 __END_DECLS 541 #endif /* !_KERNEL */ 542 543 #endif /* !_SYS_SOCKET_H_ */ 544