File: accept.2

package info (click to toggle)
manpages-fr 0.5-3
  • links: PTS
  • area: main
  • in suites: slink
  • size: 4,236 kB
  • ctags: 4
  • sloc: makefile: 55
file content (230 lines) | stat: -rw-r--r-- 6,886 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
.\" Copyright (c) 1983, 1990, 1991 The Regents of the University of California.
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\"    must display the following acknowledgement:
.\"	This product includes software developed by the University of
.\"	California, Berkeley and its contributors.
.\" 4. Neither the name of the University nor the names of its contributors
.\"    may be used to endorse or promote products derived from this software
.\"    without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\"     @(#)accept.2	6.6 (Berkeley) 4/29/91
.\"
.\" Modified Sat Jul 24 16:42:42 1993 by Rik Faith (faith@cs.unc.edu)
.\"
.\" Traduction 9/10/1996 par Christophe Blaess (ccb@club-internet.fr)
.\"
.\" Correction le 15/12/96 suite a une remarque de <Yves.Arrouye@marin.fdn.fr>
.\" Mise a Jour 8/04/97
.TH ACCEPT 2 "8 Avril 1997" BSD "Manuel du programmeur Linux"
.SH NOM
accept \- Accepter une connexion sur une socket.
.SH SYNOPSIS
.B #include <sys/types.h>
.br
.B #include <sys/socket.h>
.br
.BI "int accept(int " sock ", struct sockaddr *" addr ", int *" addrlen );
.SH DESCRIPTION

.B accept
est utilise generalement avec des processus serveurs orientes\-connexion.

L'argument
.I sock
est une socket qui a ete creee avec la fonction
.BR socket (2).
On lui a affecte une adresse avec
.BR bind (2).
Enfin on a indique au systeme,
avec
.BR listen (2)
qu'elle
desirait recevoir des connexions entrantes.

L'appel systeme
.B accept
extrait la premiere connexion de la file des connexions en attente,
cree une nouvelle socket avec les memes proprietes que
.I sock
et alloue un nouveau descripteur de fichier pour cette socket.

S'il n'y a pas de connexion en attente dans la file, et si la socket
est bloquante,
.B accept
se met en attente d'une connexion. Si la socket est 
non-bloquante, et qu'aucune connexion n'est presente dans la file,
.B accept
retourne une erreur decrite ci-dessous. 

Une socket acceptee ne peut
pas etre utilisee pour accepter de nouvelles connexions. La socket
originale
.I sock
reste ouverte.

L'argument
.I addr
est un parametre resultat qui est renseigne avec l'adresse de l'entite
se connectant, telle qu'elle est connue par la couche de communication.
Le format exact du parametre
.I addr
est fonction du domaine dans lequel la communication s'etablit. Le
parametre-resultat
.I addrlen
est renseigne avec la longueur (en octets) de l'adresse retournee.
Ce parametre doit initialement contenir la longueur du parametre
.I addr.

Cet appel systeme est utilise avec les sockets utilisant un protocole
en mode connecte, generalement du type
.BR SOCK_STREAM . 

Lorsque l'on desire accepter des connexions sur plusieurs sockets
simultanement, il est important de ne pas rester bloque en
attente avec l'appel
.B accept
sur une seule d'entre elles.
Il est alors possible d'utiliser l'appel-systeme
.BR select (2)
sur l'ensemble des sockets pour determiner la disponibilite
des donnees a lire, et d'effectuer ensuite l'appel
.B accept
sur celles qui ont effectivement recu des demandes de connexion.


Pour certain protocoles necessitant une confirmation explicite,
comme
.B ISO
ou
.BR DATAKIT ,
.B accept
peut etre considere comme extrayant simplement la connexion suivante de
la file, sans demander de confirmation. Cette confirmation peut etre
effectuee par une simple lecture ou ecriture sur le nouveau descripteur
de fichier, et un rejet peut etre effectue en fermant simplement la 
nouvelle socket.

On peut obtenir les donnees utilisateur d'une connexion sans
confirmation, en effectuant un appel-systeme
.BR recvmsg (2)
avec un
.I msg_iovlen
valant zero, et un
.IR msg_controllen
non nul, ou en effectuant une demande
.BR getsockopt (2).

De meme on peut fournir des informations sur un rejet de connexion en
utilisant un appel
.BR sendmsg (2)
en fournissant uniquement les donnees de controle,
ou en appelant
.BR setsockopt (2).
.SH "VALEUR RENVOYEE"
.BR accept
renvoie \-1 en cas d'erreur. S'il reussit il renvoie
un entier non-negatif, constituant un descripteur pour la nouvelle
socket.
.SH ERREURS
.TP 0.8i
.B EBADF
.I sock
est un descripteur invalide.
.TP
.B ENOTSOCK
.I sock
est un descripteur de fichier, pas de socket.
.TP
.B EOPNOTSUPP
La socket de reference n'est pas de type
.BR SOCK_STREAM . 
.TP
.B EFAULT
.I addr
pointe en-dehors de l'espace d'adresse accessible.
.TP
.B EWOULDBLOCK
La socket est non-bloquante et aucune connexion n'est
presente dans la file.
.SH EXEMPLE

Un scenario typique de mise en oeuvre de serveur oriente
connexion est le suivant :

.nf

int  pnum;
int  sock;
int  nouvelle;

sock  = socket (famille, type, 0);
if (sock < 0) {
    perror ("socket");
    exit (1);
}
if (bind (sock, & mon_adresse, longueur_adresse) < 0) {
    perror ("bind");
    exit (1);
}
if (listen (sock, 5) < 0) {
    perror ("listen");
    exit (1);
}

while (1) {

    nouvelle = accept (sock, & adresse_client, & lg_adresse_client);
    if (nouvelle < 0) {
        perror ("accept");
        exit (1);
    }

    if ((pnum = fork ()) == 0) {
        /* Processus fils */
        close (sock);
        Traiter_le_client (nouvelle);
        exit (0);
    }

    if (pnum > 0) {

        /* Processus pere */
        close (nouvelle);
        /* Attendre la connexion suivante */
        continue;
    }

    perror ("fork");
    exit (1);
}
.fi
.SH "CONFORMITE"
SVr4, BSD 4.4.
La fonction
.B accept
est apparue dans BSD 4.2. SVr4 fournit une condition d'erreur
supplementaire EOPNOTSUPP.
.SH "VOIR AUSSI"
.BR bind "(2), " connect "(2), " listen "(2), " select "(2), " socket (2)