next up previous contents
Next: ISDN Up: Kommunikationsprotokolle Previous: PPP

TCP/IP über die Socket-Schnittstelle

Die Socket-Schnittstelle wurde bereits in Abschnitt 2.2.4 vorgestellt. Das folgende C-Programm enthält die Initialisierungssequenz für eine TCP-Socketverbindung auf der Serverseite:

#include <vxWorks.h>
#include <sockLib.h>

struct sockaddr_in  serverAddr;     /* server's socket address */
int sFd;            /* socket file descriptor */
int sockAddrSize;   /* size of socket address structure */
const int one = 1;
const int keepalive_value = 1;

/* choose local address*/
sockAddrSize = sizeof (struct sockaddr_in);
bzero ((char *) &serverAddr, sockAddrSize);
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons (SERVER_PORT_NUM);
serverAddr.sin_addr.s_addr = htonl (INADDR_ANY);

/* create the TCP-socket */
sFd = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP)

/* socket options*/
setsockopt(sFd, SOL_SOCKET,SO_REUSEADDR,(char *)&one,sizeof(one));
setsockopt(sFd, SOL_SOCKET,SO_KEEPALIVE,(char *)&keepalive_value,
               sizeof(keepalive_value));

/* bind socket to local address*/
bind(sFd, (struct sockaddr *) &serverAddr, sockAddrSize);
listen(sFd, SERVER_MAX_CONNECTIONS);
.
.
Nach der Initialisierung kann der Server ein accept() ausführen. Erfolgt eine Anfrage durch den Client, kehrt accept() zurück und die Verbindung ist aufgebaut. Der Server kann mit read()- und write()-Operationen Daten mit dem Client austauschen:

struct sockaddr_in  clientAddr;     /* client's socket address */
int  newFd;          /* socket descriptor from accept */

newFd = accept (sFd, (struct sockaddr *) &clientAddr,&sockAddrSize);
nRead = read(newFd, &request_message[0],REQUEST_MSG_SIZE);


Thorsten Thormaehlen
2000-03-27