summaryrefslogtreecommitdiffstats
path: root/man3/getaddrinfo.3
diff options
context:
space:
mode:
Diffstat (limited to 'man3/getaddrinfo.3')
-rw-r--r--man3/getaddrinfo.3854
1 files changed, 0 insertions, 854 deletions
diff --git a/man3/getaddrinfo.3 b/man3/getaddrinfo.3
deleted file mode 100644
index e036e94..0000000
--- a/man3/getaddrinfo.3
+++ /dev/null
@@ -1,854 +0,0 @@
-'\" t
-.\" Copyright (c) 2007, 2008 Michael Kerrisk <mtk.manpages@gmail.com>
-.\" and Copyright (c) 2006 Ulrich Drepper <drepper@redhat.com>
-.\" A few pieces of an earlier version remain:
-.\" Copyright 2000, Sam Varshavchik <mrsam@courier-mta.com>
-.\"
-.\" SPDX-License-Identifier: Linux-man-pages-copyleft
-.\"
-.\" References: RFC 2553
-.\"
-.\" 2005-08-09, mtk, added AI_ALL, AI_ADDRCONFIG, AI_V4MAPPED,
-.\" and AI_NUMERICSERV.
-.\" 2006-11-25, Ulrich Drepper <drepper@redhat.com>
-.\" Add text describing Internationalized Domain Name extensions.
-.\" 2007-06-08, mtk: added example programs
-.\" 2008-02-26, mtk; clarify discussion of NULL 'hints' argument; other
-.\" minor rewrites.
-.\" 2008-06-18, mtk: many parts rewritten
-.\" 2008-12-04, Petr Baudis <pasky@suse.cz>
-.\" Describe results ordering and reference /etc/gai.conf.
-.\"
-.\" FIXME . glibc's 2.9 NEWS file documents DCCP and UDP-lite support
-.\" and is SCTP support now also there?
-.\"
-.TH getaddrinfo 3 2024-02-18 "Linux man-pages 6.7"
-.SH NAME
-getaddrinfo, freeaddrinfo, gai_strerror \- network address and
-service translation
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/types.h>
-.B #include <sys/socket.h>
-.B #include <netdb.h>
-.P
-.BI "int getaddrinfo(const char *restrict " node ,
-.BI " const char *restrict " service ,
-.BI " const struct addrinfo *restrict " hints ,
-.BI " struct addrinfo **restrict " res );
-.P
-.BI "void freeaddrinfo(struct addrinfo *" res );
-.P
-.BI "const char *gai_strerror(int " errcode );
-.fi
-.P
-.RS -4
-Feature Test Macro Requirements for glibc (see
-.BR feature_test_macros (7)):
-.RE
-.P
-.BR getaddrinfo (),
-.BR freeaddrinfo (),
-.BR gai_strerror ():
-.nf
- Since glibc 2.22:
- _POSIX_C_SOURCE >= 200112L
- glibc 2.21 and earlier:
- _POSIX_C_SOURCE
-.fi
-.SH DESCRIPTION
-Given
-.I node
-and
-.IR service ,
-which identify an Internet host and a service,
-.BR getaddrinfo ()
-returns one or more
-.I addrinfo
-structures, each of which contains an Internet address
-that can be specified in a call to
-.BR bind (2)
-or
-.BR connect (2).
-The
-.BR getaddrinfo ()
-function combines the functionality provided by the
-.\" .BR getipnodebyname (3),
-.\" .BR getipnodebyaddr (3),
-.BR gethostbyname (3)
-and
-.BR getservbyname (3)
-functions into a single interface, but unlike the latter functions,
-.BR getaddrinfo ()
-is reentrant and allows programs to eliminate IPv4-versus-IPv6 dependencies.
-.P
-The
-.I addrinfo
-structure used by
-.BR getaddrinfo ()
-contains the following fields:
-.P
-.in +4n
-.EX
-struct addrinfo {
- int ai_flags;
- int ai_family;
- int ai_socktype;
- int ai_protocol;
- socklen_t ai_addrlen;
- struct sockaddr *ai_addr;
- char *ai_canonname;
- struct addrinfo *ai_next;
-};
-.EE
-.in
-.P
-The
-.I hints
-argument points to an
-.I addrinfo
-structure that specifies criteria for selecting the socket address
-structures returned in the list pointed to by
-.IR res .
-If
-.I hints
-is not NULL it points to an
-.I addrinfo
-structure whose
-.IR ai_family ,
-.IR ai_socktype ,
-and
-.I ai_protocol
-specify criteria that limit the set of socket addresses returned by
-.BR getaddrinfo (),
-as follows:
-.TP
-.I ai_family
-This field specifies the desired address family for the returned addresses.
-Valid values for this field include
-.B AF_INET
-and
-.BR AF_INET6 .
-The value
-.B AF_UNSPEC
-indicates that
-.BR getaddrinfo ()
-should return socket addresses for any address family
-(either IPv4 or IPv6, for example) that can be used with
-.I node
-and
-.IR service .
-.TP
-.I ai_socktype
-This field specifies the preferred socket type, for example
-.B SOCK_STREAM
-or
-.BR SOCK_DGRAM .
-Specifying 0 in this field indicates that socket addresses of any type
-can be returned by
-.BR getaddrinfo ().
-.TP
-.I ai_protocol
-This field specifies the protocol for the returned socket addresses.
-Specifying 0 in this field indicates that socket addresses with
-any protocol can be returned by
-.BR getaddrinfo ().
-.TP
-.I ai_flags
-This field specifies additional options, described below.
-Multiple flags are specified by bitwise OR-ing them together.
-.P
-All the other fields in the structure pointed to by
-.I hints
-must contain either 0 or a null pointer, as appropriate.
-.P
-Specifying
-.I hints
-as NULL is equivalent to setting
-.I ai_socktype
-and
-.I ai_protocol
-to 0;
-.I ai_family
-to
-.BR AF_UNSPEC ;
-and
-.I ai_flags
-to
-.BR "(AI_V4MAPPED\ |\ AI_ADDRCONFIG)" .
-(POSIX specifies different defaults for
-.IR ai_flags ;
-see NOTES.)
-.I node
-specifies either a numerical network address
-(for IPv4, numbers-and-dots notation as supported by
-.BR inet_aton (3);
-for IPv6, hexadecimal string format as supported by
-.BR inet_pton (3)),
-or a network hostname, whose network addresses are looked up and resolved.
-If
-.I hints.ai_flags
-contains the
-.B AI_NUMERICHOST
-flag, then
-.I node
-must be a numerical network address.
-The
-.B AI_NUMERICHOST
-flag suppresses any potentially lengthy network host address lookups.
-.P
-If the
-.B AI_PASSIVE
-flag is specified in
-.IR hints.ai_flags ,
-and
-.I node
-is NULL,
-then the returned socket addresses will be suitable for
-.BR bind (2)ing
-a socket that will
-.BR accept (2)
-connections.
-The returned socket address will contain the "wildcard address"
-.RB ( INADDR_ANY
-for IPv4 addresses,
-.B IN6ADDR_ANY_INIT
-for IPv6 address).
-The wildcard address is used by applications (typically servers)
-that intend to accept connections on any of the host's network addresses.
-If
-.I node
-is not NULL, then the
-.B AI_PASSIVE
-flag is ignored.
-.P
-If the
-.B AI_PASSIVE
-flag is not set in
-.IR hints.ai_flags ,
-then the returned socket addresses will be suitable for use with
-.BR connect (2),
-.BR sendto (2),
-or
-.BR sendmsg (2).
-If
-.I node
-is NULL,
-then the network address will be set to the loopback interface address
-.RB ( INADDR_LOOPBACK
-for IPv4 addresses,
-.B IN6ADDR_LOOPBACK_INIT
-for IPv6 address);
-this is used by applications that intend to communicate
-with peers running on the same host.
-.P
-.I service
-sets the port in each returned address structure.
-If this argument is a service name (see
-.BR services (5)),
-it is translated to the corresponding port number.
-This argument can also be specified as a decimal number,
-which is simply converted to binary.
-If
-.I service
-is NULL, then the port number of the returned socket addresses
-will be left uninitialized.
-If
-.B AI_NUMERICSERV
-is specified in
-.I hints.ai_flags
-and
-.I service
-is not NULL, then
-.I service
-must point to a string containing a numeric port number.
-This flag is used to inhibit the invocation of a name resolution service
-in cases where it is known not to be required.
-.P
-Either
-.I node
-or
-.IR service ,
-but not both, may be NULL.
-.P
-The
-.BR getaddrinfo ()
-function allocates and initializes a linked list of
-.I addrinfo
-structures, one for each network address that matches
-.I node
-and
-.IR service ,
-subject to any restrictions imposed by
-.IR hints ,
-and returns a pointer to the start of the list in
-.IR res .
-The items in the linked list are linked by the
-.I ai_next
-field.
-.P
-There are several reasons why
-the linked list may have more than one
-.I addrinfo
-structure, including: the network host is multihomed, accessible
-over multiple protocols (e.g., both
-.B AF_INET
-and
-.BR AF_INET6 );
-or the same service is available from multiple socket types (one
-.B SOCK_STREAM
-address and another
-.B SOCK_DGRAM
-address, for example).
-Normally, the application should try
-using the addresses in the order in which they are returned.
-The sorting function used within
-.BR getaddrinfo ()
-is defined in RFC\ 3484; the order can be tweaked for a particular
-system by editing
-.I /etc/gai.conf
-(available since glibc 2.5).
-.P
-If
-.I hints.ai_flags
-includes the
-.B AI_CANONNAME
-flag, then the
-.I ai_canonname
-field of the first of the
-.I addrinfo
-structures in the returned list is set to point to the
-official name of the host.
-.\" Prior to glibc 2.3.4, the ai_canonname of each addrinfo
-.\" structure was set pointing to the canonical name; that was
-.\" more than POSIX.1-2001 specified, or other implementations provided.
-.\" MTK, Aug 05
-.P
-The remaining fields of each returned
-.I addrinfo
-structure are initialized as follows:
-.IP \[bu] 3
-The
-.IR ai_family ,
-.IR ai_socktype ,
-and
-.I ai_protocol
-fields return the socket creation parameters (i.e., these fields have
-the same meaning as the corresponding arguments of
-.BR socket (2)).
-For example,
-.I ai_family
-might return
-.B AF_INET
-or
-.BR AF_INET6 ;
-.I ai_socktype
-might return
-.B SOCK_DGRAM
-or
-.BR SOCK_STREAM ;
-and
-.I ai_protocol
-returns the protocol for the socket.
-.IP \[bu]
-A pointer to the socket address is placed in the
-.I ai_addr
-field, and the length of the socket address, in bytes,
-is placed in the
-.I ai_addrlen
-field.
-.P
-If
-.I hints.ai_flags
-includes the
-.B AI_ADDRCONFIG
-flag, then IPv4 addresses are returned in the list pointed to by
-.I res
-only if the local system has at least one
-IPv4 address configured, and IPv6 addresses are returned
-only if the local system has at least one IPv6 address configured.
-The loopback address is not considered for this case as valid
-as a configured address.
-This flag is useful on, for example,
-IPv4-only systems, to ensure that
-.BR getaddrinfo ()
-does not return IPv6 socket addresses that would always fail in
-.BR connect (2)
-or
-.BR bind (2).
-.P
-If
-.I hints.ai_flags
-specifies the
-.B AI_V4MAPPED
-flag, and
-.I hints.ai_family
-was specified as
-.BR AF_INET6 ,
-and no matching IPv6 addresses could be found,
-then return IPv4-mapped IPv6 addresses in the list pointed to by
-.IR res .
-If both
-.B AI_V4MAPPED
-and
-.B AI_ALL
-are specified in
-.IR hints.ai_flags ,
-then return both IPv6 and IPv4-mapped IPv6 addresses
-in the list pointed to by
-.IR res .
-.B AI_ALL
-is ignored if
-.B AI_V4MAPPED
-is not also specified.
-.P
-The
-.BR freeaddrinfo ()
-function frees the memory that was allocated
-for the dynamically allocated linked list
-.IR res .
-.SS Extensions to getaddrinfo() for Internationalized Domain Names
-Starting with glibc 2.3.4,
-.BR getaddrinfo ()
-has been extended to selectively allow the incoming and outgoing
-hostnames to be transparently converted to and from the
-Internationalized Domain Name (IDN) format (see RFC 3490,
-.IR "Internationalizing Domain Names in Applications (IDNA)" ).
-Four new flags are defined:
-.TP
-.B AI_IDN
-If this flag is specified, then the node name given in
-.I node
-is converted to IDN format if necessary.
-The source encoding is that of the current locale.
-.IP
-If the input name contains non-ASCII characters, then the IDN encoding
-is used.
-Those parts of the node name (delimited by dots) that contain
-non-ASCII characters are encoded using ASCII Compatible Encoding (ACE)
-before being passed to the name resolution functions.
-.\" Implementation Detail:
-.\" To minimize effects on system performance the implementation might
-.\" want to check whether the input string contains any non-ASCII
-.\" characters. If there are none the IDN step can be skipped completely.
-.\" On systems which allow not-ASCII safe encodings for a locale this
-.\" might be a problem.
-.TP
-.B AI_CANONIDN
-After a successful name lookup, and if the
-.B AI_CANONNAME
-flag was specified,
-.BR getaddrinfo ()
-will return the canonical name of the
-node corresponding to the
-.I addrinfo
-structure value passed back.
-The return value is an exact copy of the value returned by the name
-resolution function.
-.IP
-If the name is encoded using ACE, then it will contain the
-.I xn\-\-
-prefix for one or more components of the name.
-To convert these components into a readable form the
-.B AI_CANONIDN
-flag can be passed in addition to
-.BR AI_CANONNAME .
-The resulting string is encoded using the current locale's encoding.
-.\"
-.\"Implementation Detail:
-.\"If no component of the returned name starts with xn\-\- the IDN
-.\"step can be skipped, therefore avoiding unnecessary slowdowns.
-.TP
-.B AI_IDN_ALLOW_UNASSIGNED
-.TQ
-.B AI_IDN_USE_STD3_ASCII_RULES
-Setting these flags will enable the
-IDNA_ALLOW_UNASSIGNED (allow unassigned Unicode code points) and
-IDNA_USE_STD3_ASCII_RULES (check output to make sure it is a STD3
-conforming hostname)
-flags respectively to be used in the IDNA handling.
-.SH RETURN VALUE
-.\" FIXME glibc defines the following additional errors, some which
-.\" can probably be returned by getaddrinfo(); they need to
-.\" be documented.
-.\" #ifdef __USE_GNU
-.\" #define EAI_INPROGRESS -100 /* Processing request in progress. */
-.\" #define EAI_CANCELED -101 /* Request canceled. */
-.\" #define EAI_NOTCANCELED -102 /* Request not canceled. */
-.\" #define EAI_ALLDONE -103 /* All requests done. */
-.\" #define EAI_INTR -104 /* Interrupted by a signal. */
-.\" #define EAI_IDN_ENCODE -105 /* IDN encoding failed. */
-.\" #endif
-.BR getaddrinfo ()
-returns 0 if it succeeds, or one of the following nonzero error codes:
-.TP
-.B EAI_ADDRFAMILY
-.\" Not in SUSv3
-The specified network host does not have any network addresses in the
-requested address family.
-.TP
-.B EAI_AGAIN
-The name server returned a temporary failure indication.
-Try again later.
-.TP
-.B EAI_BADFLAGS
-.I hints.ai_flags
-contains invalid flags; or,
-.I hints.ai_flags
-included
-.B AI_CANONNAME
-and
-.I node
-was NULL.
-.TP
-.B EAI_FAIL
-The name server returned a permanent failure indication.
-.TP
-.B EAI_FAMILY
-The requested address family is not supported.
-.TP
-.B EAI_MEMORY
-Out of memory.
-.TP
-.B EAI_NODATA
-.\" Not in SUSv3
-The specified network host exists, but does not have any
-network addresses defined.
-.TP
-.B EAI_NONAME
-The
-.I node
-or
-.I service
-is not known; or both
-.I node
-and
-.I service
-are NULL; or
-.B AI_NUMERICSERV
-was specified in
-.I hints.ai_flags
-and
-.I service
-was not a numeric port-number string.
-.TP
-.B EAI_SERVICE
-The requested service is not available for the requested socket type.
-It may be available through another socket type.
-For example, this error could occur if
-.I service
-was "shell" (a service available only on stream sockets), and either
-.I hints.ai_protocol
-was
-.BR IPPROTO_UDP ,
-or
-.I hints.ai_socktype
-was
-.BR SOCK_DGRAM ;
-or the error could occur if
-.I service
-was not NULL, and
-.I hints.ai_socktype
-was
-.B SOCK_RAW
-(a socket type that does not support the concept of services).
-.TP
-.B EAI_SOCKTYPE
-The requested socket type is not supported.
-This could occur, for example, if
-.I hints.ai_socktype
-and
-.I hints.ai_protocol
-are inconsistent (e.g.,
-.B SOCK_DGRAM
-and
-.BR IPPROTO_TCP ,
-respectively).
-.TP
-.B EAI_SYSTEM
-Other system error;
-.I errno
-is set to indicate the error.
-.P
-The
-.BR gai_strerror ()
-function translates these error codes to a human readable string,
-suitable for error reporting.
-.SH FILES
-.I /etc/gai.conf
-.SH ATTRIBUTES
-For an explanation of the terms used in this section, see
-.BR attributes (7).
-.TS
-allbox;
-lbx lb lb
-l l l.
-Interface Attribute Value
-T{
-.na
-.nh
-.BR getaddrinfo ()
-T} Thread safety MT-Safe env locale
-T{
-.na
-.nh
-.BR freeaddrinfo (),
-.BR gai_strerror ()
-T} Thread safety MT-Safe
-.TE
-.SH VERSIONS
-According to POSIX.1, specifying
-.\" POSIX.1-2001, POSIX.1-2008
-.I hints
-as NULL should cause
-.I ai_flags
-to be assumed as 0.
-The GNU C library instead assumes a value of
-.B (AI_V4MAPPED\~|\~AI_ADDRCONFIG)
-for this case,
-since this value is considered an improvement on the specification.
-.SH STANDARDS
-POSIX.1-2008.
-.TP
-.BR getaddrinfo ()
-RFC\ 2553.
-.SH HISTORY
-POSIX.1-2001.
-.TP
-.B AI_ADDRCONFIG
-.TQ
-.B AI_ALL
-.TQ
-.B AI_V4MAPPED
-glibc 2.3.3.
-.TP
-.B AI_NUMERICSERV
-glibc 2.3.4.
-.SH NOTES
-.BR getaddrinfo ()
-supports the
-.IB address % scope-id
-notation for specifying the IPv6 scope-ID.
-.SH EXAMPLES
-.\" getnameinfo.3 refers to this example
-.\" socket.2 refers to this example
-.\" bind.2 refers to this example
-.\" connect.2 refers to this example
-.\" recvfrom.2 refers to this example
-.\" sendto.2 refers to this example
-The following programs demonstrate the use of
-.BR getaddrinfo (),
-.BR gai_strerror (),
-.BR freeaddrinfo (),
-and
-.BR getnameinfo (3).
-The programs are an echo server and client for UDP datagrams.
-.SS Server program
-\&
-.\" SRC BEGIN (server.c)
-.EX
-#include <netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <unistd.h>
-\&
-#define BUF_SIZE 500
-\&
-int
-main(int argc, char *argv[])
-{
- int sfd, s;
- char buf[BUF_SIZE];
- ssize_t nread;
- socklen_t peer_addrlen;
- struct addrinfo hints;
- struct addrinfo *result, *rp;
- struct sockaddr_storage peer_addr;
-\&
- if (argc != 2) {
- fprintf(stderr, "Usage: %s port\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */
- hints.ai_socktype = SOCK_DGRAM; /* Datagram socket */
- hints.ai_flags = AI_PASSIVE; /* For wildcard IP address */
- hints.ai_protocol = 0; /* Any protocol */
- hints.ai_canonname = NULL;
- hints.ai_addr = NULL;
- hints.ai_next = NULL;
-\&
- s = getaddrinfo(NULL, argv[1], &hints, &result);
- if (s != 0) {
- fprintf(stderr, "getaddrinfo: %s\en", gai_strerror(s));
- exit(EXIT_FAILURE);
- }
-\&
- /* getaddrinfo() returns a list of address structures.
- Try each address until we successfully bind(2).
- If socket(2) (or bind(2)) fails, we (close the socket
- and) try the next address. */
-\&
- for (rp = result; rp != NULL; rp = rp\->ai_next) {
- sfd = socket(rp\->ai_family, rp\->ai_socktype,
- rp\->ai_protocol);
- if (sfd == \-1)
- continue;
-\&
- if (bind(sfd, rp\->ai_addr, rp\->ai_addrlen) == 0)
- break; /* Success */
-\&
- close(sfd);
- }
-\&
- freeaddrinfo(result); /* No longer needed */
-\&
- if (rp == NULL) { /* No address succeeded */
- fprintf(stderr, "Could not bind\en");
- exit(EXIT_FAILURE);
- }
-\&
- /* Read datagrams and echo them back to sender. */
-\&
- for (;;) {
- char host[NI_MAXHOST], service[NI_MAXSERV];
-\&
- peer_addrlen = sizeof(peer_addr);
- nread = recvfrom(sfd, buf, BUF_SIZE, 0,
- (struct sockaddr *) &peer_addr, &peer_addrlen);
- if (nread == \-1)
- continue; /* Ignore failed request */
-\&
- s = getnameinfo((struct sockaddr *) &peer_addr,
- peer_addrlen, host, NI_MAXHOST,
- service, NI_MAXSERV, NI_NUMERICSERV);
- if (s == 0)
- printf("Received %zd bytes from %s:%s\en",
- nread, host, service);
- else
- fprintf(stderr, "getnameinfo: %s\en", gai_strerror(s));
-\&
- if (sendto(sfd, buf, nread, 0, (struct sockaddr *) &peer_addr,
- peer_addrlen) != nread)
- {
- fprintf(stderr, "Error sending response\en");
- }
- }
-}
-.EE
-.\" SRC END
-.SS Client program
-\&
-.\" SRC BEGIN (client.c)
-.EX
-#include <netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <unistd.h>
-\&
-#define BUF_SIZE 500
-\&
-int
-main(int argc, char *argv[])
-{
- int sfd, s;
- char buf[BUF_SIZE];
- size_t len;
- ssize_t nread;
- struct addrinfo hints;
- struct addrinfo *result, *rp;
-\&
- if (argc < 3) {
- fprintf(stderr, "Usage: %s host port msg...\en", argv[0]);
- exit(EXIT_FAILURE);
- }
-\&
- /* Obtain address(es) matching host/port. */
-\&
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */
- hints.ai_socktype = SOCK_DGRAM; /* Datagram socket */
- hints.ai_flags = 0;
- hints.ai_protocol = 0; /* Any protocol */
-\&
- s = getaddrinfo(argv[1], argv[2], &hints, &result);
- if (s != 0) {
- fprintf(stderr, "getaddrinfo: %s\en", gai_strerror(s));
- exit(EXIT_FAILURE);
- }
-\&
- /* getaddrinfo() returns a list of address structures.
- Try each address until we successfully connect(2).
- If socket(2) (or connect(2)) fails, we (close the socket
- and) try the next address. */
-\&
- for (rp = result; rp != NULL; rp = rp\->ai_next) {
- sfd = socket(rp\->ai_family, rp\->ai_socktype,
- rp\->ai_protocol);
- if (sfd == \-1)
- continue;
-\&
- if (connect(sfd, rp\->ai_addr, rp\->ai_addrlen) != \-1)
- break; /* Success */
-\&
- close(sfd);
- }
-\&
- freeaddrinfo(result); /* No longer needed */
-\&
- if (rp == NULL) { /* No address succeeded */
- fprintf(stderr, "Could not connect\en");
- exit(EXIT_FAILURE);
- }
-\&
- /* Send remaining command\-line arguments as separate
- datagrams, and read responses from server. */
-\&
- for (size_t j = 3; j < argc; j++) {
- len = strlen(argv[j]) + 1;
- /* +1 for terminating null byte */
-\&
- if (len > BUF_SIZE) {
- fprintf(stderr,
- "Ignoring long message in argument %zu\en", j);
- continue;
- }
-\&
- if (write(sfd, argv[j], len) != len) {
- fprintf(stderr, "partial/failed write\en");
- exit(EXIT_FAILURE);
- }
-\&
- nread = read(sfd, buf, BUF_SIZE);
- if (nread == \-1) {
- perror("read");
- exit(EXIT_FAILURE);
- }
-\&
- printf("Received %zd bytes: %s\en", nread, buf);
- }
-\&
- exit(EXIT_SUCCESS);
-}
-.EE
-.\" SRC END
-.SH SEE ALSO
-.\" .BR getipnodebyaddr (3),
-.\" .BR getipnodebyname (3),
-.BR getaddrinfo_a (3),
-.BR gethostbyname (3),
-.BR getnameinfo (3),
-.BR inet (3),
-.BR gai.conf (5),
-.BR hostname (7),
-.BR ip (7)