:

---------------------------------------------------------------
 http://wist.ifmo.ru/info/index.html
---------------------------------------------------------------
. . . . , , . : UNIX , Internet , ..

Internet - IP , Internet. , -, -, , , , TCP.


socket.

s = socket(domain, type, protocol);

. Internet, :

communication domain -
AF_INET (Internet ).
type of the socket -
SOCK_STREAM; , , .
stream. :
Datagram socket -
. , , , . , .
Raw socket -
, -. - .
socket , , -1 . .

stream TCP, , socket :

s = socket(AF_INET, SOCK_STREAM, 0);


. , , , . . Internet . .

Internet , , , , connect send , .

bind:

bind(s, name, namelen);

(name) , . .


connect:

error = connect(s, serveraddr, serveraddrlen);

, s serveraddr, sockaddr_in, . , connect bind.

Connect 0, . -1 , . , read write, close.

. , , , . listen:

error = listen(s, qlength);

s , qlength , , ; .

, , ' '. Internet . accept:

newsock = accept(s, clientaddr, clientaddrlen);

, , , accept, .

1.

IMAGE
. 1:


, . , read write:

write(s, buf, sizeof(buf)); read(s, buf, sizeof(buf));

send recv read write, , .

send(s, buf, sizeof(buf), flags); recv(s, buf, sizeof(buf), flags);

, , :


, , " " ( FIN ).

, close, :

close(s);

, ( stream), . , , , . , shutdown . shutdown "" . :

shutdown(s, how);

how :


, WWW

/*
-----------------------------------------------------------
  MakeConnection

  Function allocates a socket and estabishes a connection
  with remote host. Default port number 80.

  Input : WWW server name (with port number, if it is not 80)
  Output : file descriptor on success
              -1 on error

-----------------------------------------------------------
*/
int MakeConnection(unsigned char* ServerName){
  int s;
  struct sockaddr_in ssin;
  struct hostent* hp;
  int PortNum;
  unsigned char strHlp[STRNGLEN], *pch;

  /* use default port number - 80 or specific number from the
     server name */
  strcpy(strHlp,ServerName);
  pch = strchr(strHlp,':');
  if(pch==NULL){
    PortNum = 80;
  }else{
    pch[0] = '\0';
    pch++;
    PortNum = atoi(pch);
    if(PortNum==0){
      PortNum = 80;
    }
  }

  /* get host by name - resolve host name into IP address */
  if( (hp=gethostbyname(strHlp)) == NULL  )
  {
     return -1;
  }

  bzero(&ssin, sizeof(ssin));
  bcopy(hp->h_addr, &ssin.sin_addr, hp->h_length);
  ssin.sin_family = hp->h_addrtype;
  ssin.sin_port = htons(PortNum);

  /* allocate a socket */
  if((s=socket(AF_INET, SOCK_STREAM, 0))==-1)
  {
     return -1;
  }

  /* make a connection */
  if(connect(s, &ssin, sizeof(ssin), 0)==-1){

     return -1;
  }

  return s; /* socket descriptor */
}

Last-modified: Thu, 28 May 1998 14:26:10 GMT
: