int close(int sock_des);

Wird ein Socket nicht mehr benötigt, wird er mittels der Funktion close() entfernt. Der Socket-Deskriptor wird durch den Parameter sock_des angegeben. Konnte der Socket nicht entfernt werden liefert die Funktion den Wert -1, sonst den Wert 0.

Das Verhalten der close()-Funktion kann durch Setzen der SO_LINGER -Option zeitlich überwacht werden. Der SO_LINGER -Option wird als Parameter eine maximale Zeitdauer angegeben in der der Socket und die Verbindung zum Zielrechner abgebaut sein muss. Ist dies nicht der Fall. dann wird die Verbindung „brutal“ gekappt. Dies ist auch der Fall, wenn als maximale Zeitdauer der Wert „0“ angegeben wird.

Zu bemerken ist, dass der Port zum Zielrechner nach dem Beenden der close()-Funktion für eine gewisse Zeitdauer gesperrt ist. Würde der Port nicht gesperrt werden, dann könnte es sein, dass ein neuer Socket mit dem selben Port durch Daten des alten Sockets gestört wird. Beispielsweise können vom Netzwerk fehlgeleitete Daten den neuen Socket stören. Wird nicht gewünscht, dass der Socket gesperrt wird, dann kann sie mittels der Socket- Option SO_REUSEPORT aufgehoben werden.

Sowohl die SO_LINGER -Option als auch die SO_REUSEPORT-Option werden mittels der Funktion setsockopt() gesetzt. Die Beschreibung der Funktion setsockopt() ist in den Linux Manuals zu finden.

Beispiel:

iint sock;
int return_value;

return_value = close(sock);
if(return_value < 0)
{
	perror(“close stream socket”);
	exit(1);
}