An Open Interface for Network Programming under Microsoft Windows. DI. Dr. Peter René Dietmüller



Ähnliche Dokumente
Python Programmierung. Dipl.-Ing.(FH) Volker Schepper

Konfigurationsanleitung Access Control Lists (ACL) Funkwerk. Copyright Stefan Dahler Oktober 2008 Version 1.0.

Transmission Control Protocol (TCP)

Lösung Übungszettel 6

Übersicht. Was ist FTP? Übertragungsmodi. Sicherheit. Öffentliche FTP-Server. FTP-Software

Client-Server mit Socket und API von Berkeley

FOPT 5: Eigenständige Client-Server-Anwendungen (Programmierung verteilter Anwendungen in Java 1)

4D Server v12 64-bit Version BETA VERSION

4. Network Interfaces Welches verwenden? 5. Anwendung : Laden einer einfachen Internetseite 6. Kapselung von Paketen

TCP/IP-Protokollfamilie

Netzwerk-Programmierung in C

ARCHITEKTUR VON INFORMATIONSSYSTEMEN

Online-Publishing mit HTML und CSS für Einsteigerinnen

Kontrollfragen: Internet

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein: - Ein Bootimage ab Version Optional einen DHCP Server.

Konfigurationsanleitung Network Address Translation (NAT) Funkwerk. Seite Copyright Stefan Dahler Oktober 2008 Version 1.

TCP/UDP. Transport Layer

Virtual Private Network

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein:

ecall sms & fax-portal

Ether S-Net Diagnostik

7. TCP-IP Modell als Rollenspiel

Powermanager Server- Client- Installation

15 Transportschicht (Schicht 4)

Man liest sich: POP3/IMAP

Client/Server-Systeme

EDI Connect goes BusinessContact V2.1

2.3 Applikationen. Protokolle: TCP/IP. Telnet, FTP, Rlogin. Carsten Köhn

Stefan Dahler. 1. Remote ISDN Einwahl. 1.1 Einleitung

Anleitung zur Nutzung des SharePort Utility

Folgende Einstellungen sind notwendig, damit die Kommunikation zwischen Server und Client funktioniert:

How-to: Webserver NAT. Securepoint Security System Version 2007nx

Security. Stefan Dahler. 4. Internet Verbindung. 4.1 Einleitung

Um DynDNS zu konfigurieren, muss ausschließlich folgendes Menü konfiguriert werden:

LOG-FT BAG Filetransfer zum Austausch mit dem Bundesamt für Güterverkehr (BAG) Kurzanleitung

Kommunikations-Management

Internet und WWW Übungen

Lexware professional und premium setzen bis einschließlich Version 2012 den Sybase SQL-Datenbankserver

HIT-Software Installieren und Starten der Netzwerklizenz als Download-Anwendung

EasyWk DAS Schwimmwettkampfprogramm

Installation eblvd (Fernwartung)

Praktikum IT-Sicherheit

Gefahren aus dem Internet 1 Grundwissen April 2010

Mail-Account Unimail mit der Einstellungen für Outlook Express 5.0

ICS-Addin. Benutzerhandbuch. Version: 1.0

Einrichten eines Postfachs mit Outlook Express / Outlook bis Version 2000

MSXFORUM - Exchange Server 2003 > Konfiguration NNTP unter Exchange 2003

Rechnernetzwerke. Rechnernetze sind Verbünde von einzelnen Computern, die Daten auf elektronischem Weg miteinander austauschen können.

Seite Wireless Distribution System (Routing / Bridging) 3.1 Einleitung

Dienstspezifikation nach RFC

Objektbasierte Entwicklung

IAC-BOX Netzwerkintegration. IAC-BOX Netzwerkintegration IACBOX.COM. Version Deutsch

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

estos UCServer Multiline TAPI Driver

Anleitung Grundsetup C3 Mail & SMS Gateway V

AUTOMATISCHE -ARCHIVIERUNG. 10/07/28 BMD Systemhaus GmbH, Steyr Vervielfältigung bedarf der ausdrücklichen Genehmigung durch BMD!

Einrichtung Secure-FTP

Wie macht man einen Web- oder FTP-Server im lokalen Netzwerk für das Internet sichtbar?

Websites mit Dreamweaver MX und SSH ins Internet bringen

TCP SYN Flood - Attack. Beschreibung Auswirkungen Zuordnung zu Gefährdungskategorie und Attacken-Art Gegenmaßnahmen Quellen

Warum beschäftigt sich ein Linux-Systemhaus mit der Installation von OTRS mit einem Microsoft SQL Server?

Anwendungsprotokolle: HTTP, POP, SMTP

Der Schalter Eigenschaften öffnet die rechts stehende Ansicht. Internetprotokolle aussuchen

Scharl 2010 Dokument ist Urheberrechtlich geschützt. Port Forwarding via PuTTY und SSH. Was ist Port forwarding?

Grundlagen der Rechnernetze. Internetworking

Übung - Konfigurieren einer Windows Vista-Firewall

Anbindung des eibport an das Internet

Im Folgenden wird die Konfiguration der DIME Tools erläutert. Dazu zählen die Dienste TFTP Server, Time Server, Syslog Daemon und BootP Server.

# Socketprogrammierung

Herzlich Willkommen bei der nfon GmbH

Technical Note ewon über DSL & VPN mit einander verbinden

C.M.I. Control and Monitoring Interface. Zusatzanleitung: Datentransfer mit CAN over Ethernet (COE) Version 1.08

ISA Server 2004 Erstellen eines neuen Netzwerkes - Von Marc Grote

How to install freesshd

Konfigurationsanleitung IGMP Multicast - Video Streaming Funkwerk / Bintec. Copyright 5. September 2008 Neo-One Stefan Dahler Version 1.

Switching. Übung 7 Spanning Tree. 7.1 Szenario

Local Control Network Technische Dokumentation

TK-Schnittstelleneinrichtung. Redundante Softswitches

Routing im Internet Wie findet ein IP Paket den Weg zum Zielrechner?

KN Das Internet

Virtual Private Network

Pädagogische Hochschule Thurgau. Lehre Weiterbildung Forschung

DNÜ-Tutorium HS Niederrhein, WS 2014/2015. Probeklausur

Verbindung zu WRDS über SAS auf dem Terminalserver

1.) Nennen Sie Aufgaben und mögliche Dienste der Transportschicht (Transport Layer) des ISO/OSI-Schichtenmodells.

OP-LOG

Publizieren von Webs mit SmartFTP

Übung - Konfigurieren einer Windows-XP-Firewall

SolarWinds Engineer s Toolset

Netzwerk. Um den Hostnamen angezeigt zu bekommen $ hostname $ hostname -f Um den Hostnamen zu ändern $ hostname <neuerhostname>

21 Netzwerkprogrammierung mit Sockets

Inhaltverzeichnis 1 Einführung Zugang zu den Unifr Servern Zugang zu den Druckern Nützliche Links... 6

Transkript:

Windows Sockets An Open Interface for Network Programming under Microsoft Windows DI. Dr. Peter René Dietmüller Institut für Informationsverarbeitung und Mikroprozessortechnik Johannes Kepler Universität Linz

Überblick Geschichte Was ist Winsock? Kommunikation Winsock-Funktionen Beispiel Modi Peter René Dietmüller Windows Sockets Seite 2

Geschichte Berkeley Sockets API Winsock Version 1.0 (Juni 1992) Winsock Version 1.1 (20.01.1993) Winsock Version 2.0 (Revision 2.0.8 vom 20.05.1995) Peter René Dietmüller Windows Sockets Seite 3

Was ist Winsock? Bibliothek von Funktionen zur Kommunikation (als DLL impl.) einheitliches API für Netzwerk-Anwendungen Schnittstelle zwischen Anwendungen und Protokolle Die Anwendung ist für die Benutzerschnittstelle zuständig. Das Protokoll übernimmt das Senden/Empfangen von Daten. Winsock steht als Vermittler dazwischen. offene, frei verfügbare Schnittstelle ohne Lizenzgebühren Quellcode-kompatibel mit BSD-Sockets-Programmen Verfügbar: 16/32-Bit Windows, OS/2 unterstützt verschiedene Protokolle Peter René Dietmüller Windows Sockets Seite 4

Was ist Winsock? (2) Anwendung 1 Anwendung 2 Winsock TCP/IP IPX...... Peter René Dietmüller Windows Sockets Seite 5

Was ist Winsock? (3) OSI Model 7 6 5 4 3 Application Presentation Session Transport Network Windows Sockets Application Protocol Stack (TCP/IP) Windows Sockets API 2 Data Link Network Driver 1 Physical Network Interface Peter René Dietmüller Windows Sockets Seite 6

Winsock 2 - Architektur Quelle: MSDN Oktober 2000 Peter René Dietmüller Windows Sockets Seite 7

Sockets engl. Bezeichnung für Steckdose, Anschluß Sockets sind Endpunkte einer Kommunikation. Ein Programm kann ein oder mehrere solcher Anschlüsse öffnen. Mit einem Socket kann eine Verbindung zu einem anderen Socket aufgebaut werden oder auf eine Verbindung von einem anderen Socket gewartet werden. Die Adressierung eines Socket ist vom Protokoll abhängig. Im TCP/IP-Protokoll wird ein Socket durch die IP-Adresse des Rechners und durch eine Portnummer bestimmt. Peter René Dietmüller Windows Sockets Seite 8

Sockets (2) Damit eine Kommunikation über einen Socket laufen kann, müssen folgende Informationen bereitgestellt werden: das Protokoll die lokale Adresse (für TCP: IP-Adresse, Portnummer) und die entfernte Adresse (für TCP: IP-Adresse, Portnummer). 2) Local IP 3) Local Port 1) Protocol 4) Remote IP 5) Remote Port Peter René Dietmüller Windows Sockets Seite 9

Ports Da auf einem Rechner viele verschiedene Programme laufen können, die über das Netzwerk kommunizieren, wird mit der Portnummer festgelegt, mit welchem Programm man kommunizieren möchte. Eine Server-Anwendung wartet auf einem festgelegten Port auf eine Verbindung. Damit der Client mit dem Server kommunizieren kann, muß er genau auf diesem Port eine Verbindung zum Server aufbauen. Einige Portnummer sind fix vergeben. Sie sind meist in einer Datei namens services verzeichnet. Peter René Dietmüller Windows Sockets Seite 10

Standardisierte Ports Keyword Decimal Description echo 7/tcp Echo echo 7/udp Echo ftp-data 20/tcp File Transfer [Default Data] ftp-data 20/udp File Transfer [Default Data] ftp 21/tcp File Transfer [Control] ftp 21/udp File Transfer [Control] telnet 23/tcp Telnet telnet 23/udp Telnet Peter René Dietmüller Windows Sockets Seite 11

Byte Ordering Intel-Prozessoren speichern Multibyte-Werte in einer anderen Reihenfolge ab. Intel verwendet für seine Prozessoren little endian, während viele andere Herstelle big endian verwenden. Über das Netzwerk wird in der Regel in big endian versendet. Die meisten Winsock-Funktionen erwarten daher, daß Multibyte-Werte in big endian übergeben werden. byte order big endian 0 1 1 0 1 2 3 4 4 3 2 1 little endian Peter René Dietmüller Windows Sockets Seite 12

Kommunikation Streams über TCP STD07: J. Postel. Transmission Control Protocol. September 1981. (RFC0793) STD03: R. Braden. Host Requirements. October 1989. (RFC1122, RFC1123) Datagramme über UDP STD06: J. Postel. User Datagram Protocol. August 1980. (RFC0768) STD03: R. Braden. Host Requirements. October 1989. (RFC1122, RFC1123) Peter René Dietmüller Windows Sockets Seite 13

TCP-Kommunikation Die Kommunikation mit Hilfe des Protokolls TCP kann mit Dateioperationen verglichen werden. File I/O Datei öffnen Datei schreiben/lesen Datei schließen Winsock Socket öffnen Socket benennen Socket verbinden Daten senden/empfangen Socket schließen Peter René Dietmüller Windows Sockets Seite 14

TCP-Kommunikation (2) Die einzelnen Schritte unterscheiden sich, ob die Anwendung eine Server- oder Client-Anwendung ist. Winsock Client Server Socket öffnen socket() socket() Socket benennen -- / bind() bind() Socket verbinden connect() listen(), accept() Daten senden/empfangen send() / recv() send() / recv() Socket schließen closesocket() closesocket() Peter René Dietmüller Windows Sockets Seite 15

UDP-Kommunikation Winsock Client Server Socket öffnen socket() socket() Socket benennen -- -- / bind() Socket verbinden -- / connect() -- Daten senden sendto() / send() sendto() / send() Daten empfangen recvfrom() / recv() recvfrom() / recv() Socket schließen closesocket() closesocket() Peter René Dietmüller Windows Sockets Seite 16

socket() Diese Funktion öffnet einen Socket für ein bestimmtes Protokoll. Wenn die Funktion erfolgreich ist, gibt sie einen Socket Handle zurück, sonst den Wert INVALID_SOCKET. SOCKET PASCAL FAR socket( int af /* address family */ int type /* socket type */ int protocol); /* protocol name */ Beispiel: socket(pf_inet, SOCK_STREAM, IPPROTO_TCP) öffnet einen Socket für das Protokoll TCP Peter René Dietmüller Windows Sockets Seite 17

socket() (2) Mit socket() wird ein Socket eröffnet und das Protokoll für diesen Socket spezifiziert. 2) Local IP 3) Local Port 1) Protocol 4) Remote IP 5) Remote Port Peter René Dietmüller Windows Sockets Seite 18

sockaddr structure Um ein Socket zu adressieren, wird folgende Struktur verwendet. struct sockaddr { u_short sa_family; /* address family */ char sa_data[14]; /* undefined */ } Für jedes Protokoll gibt es eine spezialisierte Version dieser Struktur, da die Adressierung der Protokolle nicht gleich ist. Für die Internetprotokolle gibt es die Struktur sockaddr_in. Peter René Dietmüller Windows Sockets Seite 19

sockaddr_in structure struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; } sin_family: sin_port: sin_addr: address family 16-Bit port number in network order 32-Bit IP-address in network order Peter René Dietmüller Windows Sockets Seite 20

bind() Mit bind() wird einem Socket die lokale Adresse des Socket mitgeteilt. int PASCAL FAR bind( SOCKET s, /* socket handle */ struct sockaddr FAR *addr, /* local addr. */ int namelen); /* structure length */ Um die lokale IP-Adresse nicht ermitteln zu müssen, kann statt der IP-Adresse die Konstante INADDR_ANY verwendet werden. Eine Server-Anwendung muß diese Funktion aufrufen, um den Port zu setzen, auf dem sie auf einlangende Verbindungen wartet. Für eine Client-Anwendung ist es nicht notwendig, diese Funktion aufzurufen. Peter René Dietmüller Windows Sockets Seite 21

bind() (2) Mit bind() wird die lokale Adresse des Socket spezifiziert. 2) Local IP 3) Local Port 1) Protocol 4) Remote IP 5) Remote Port Peter René Dietmüller Windows Sockets Seite 22

listen() Mit listen() wird auf einem bestimmten Socket (und damit auf einem bestimmten Port) auf ankommende Verbindungen gewartet. int PASCAL FAR listen( SOCKET s, int backlog); backlog: Länge der wartenden Verbindungsanforderungen Peter René Dietmüller Windows Sockets Seite 23

connect() Diese Funktion baut eine Verbindung zu einem anderen Socket auf. int PASCAL FAR connect( SOCKET s, /* socket handle */ struct sockaddr FAR *addr, /* rem. addr. */ int namelen); /* structure length */ Peter René Dietmüller Windows Sockets Seite 24

connect() (2) Wenn bind() für diesen Socket nicht aufgerufen wurde, wird die lokale IP-Adresse und eine freie lokale Portnummer in den Socket eingetragen. 2) Local IP 3) Local Port 1) Protocol 4) Remote IP 5) Remote Port Peter René Dietmüller Windows Sockets Seite 25

accept() accept() wird nach der Funktion listen() aufgerufen und erzeugt einen neuen Socket für eine wartende Verbindung. SOCKET PASCAL FAR accept( SOCKET s, /* a listening socket */ struct sockaddr FAR *addr, /* incoming s. */ int FAR *addrlen); /* length of sockaddr */ Der Socket, der auf eingehende Verbindung wartet, ( listening socket ) bleibt von dieser Funktion unberührt und horcht weiterhin auf ankommende Verbindungen. Peter René Dietmüller Windows Sockets Seite 26

accept() (2) accept() liefert einen neuen Socket, dessen lokale Adresse und Einstellungen mit dem listening socket ident sind. Die entfernte Adresse wird aus dem Paket gewonnen, mit dem die Verbindung vom entfernten Rechner aufgebaut wird. 2) Local IP 3) Local Port 1) Protocol 4) Remote IP 5) Remote Port Peter René Dietmüller Windows Sockets Seite 27

send() send() sendet Daten über einen Socket. Aus der Funktion wird erst zurückgekehrt, wenn die Daten gesendet wurden. int FAR PASCAL send( SOCKET s, const char FAR *buf, /* Daten */ int len, /* Länge der Daten */ int flags); Peter René Dietmüller Windows Sockets Seite 28

sendto() sendto() sendet Daten über einen nicht verbundenen Socket. Aus der Funktion wird erst zurückgekehrt, wenn die Daten gesendet wurden. int FAR PASCAL sendto( SOCKET s, const char FAR *buf, /* Daten */ int len, /* Länge der Daten*/ int flags, /* Sendeoptionen */ struct sockaddr FAR *to,/* Zieladresse */ int tolen); /* Länge der Ziel.*/ Peter René Dietmüller Windows Sockets Seite 29

recv() Empfängt ein Socket Daten, werden die Daten von der Winsock- Bibliothek in einer Queue zwischengespeichert. Mit recv() können die Daten vom Programm abgeholt werden. int PASCAL FAR recv( SOCKET s, char FAR *buf, /* Puffer für empf. Daten */ int len, /* Länge des Puffers */ int flags); Peter René Dietmüller Windows Sockets Seite 30

recvfrom() Mit recvfrom() können Daten von einem nicht verbundenen Socket gelesen werden. In die beiden letzten Parameter wird die Adresse des Absenders gespeichert. int PASCAL FAR recvfrom( SOCKET s, char FAR *buf, /* empf. Daten */ int len, /* Länge der D.*/ int flags, /* Optionen */ struct sockaddr FAR *from, /* Senderadr. */ int FAR *fromlen); /* Länge Sa. */ Peter René Dietmüller Windows Sockets Seite 31

closesocket() closesocket() baut eine Verbindung zu einem anderen Socket ab und schließt den Socket. int PASCAL FAR closesocket(socket s); Peter René Dietmüller Windows Sockets Seite 32

shutdown() Bevor man mit closesocket() eine Verbindung abbaut, sollte man mit shutdown() die Verbindung teilweise abbauen. Der beteiligte Socket wird durch diese Funktion nicht geschlossen. int PASCAL FAR shutdown( SOCKET s, int how); how: Art des Shutdown 1...Es werden keine Pakete mehr empfangen. 2...Es können keine Pakete mehr gesendet werden. 3...Beides. Peter René Dietmüller Windows Sockets Seite 33

WSAStartup() WSAStartup() muß vor jeder anderen Winsock-Funktion aufgerufen werden, um die Winsock-Bibliothek zu initialisieren. int PASCAL FAR WSAStartup( WORD wversionrequired, LPWSADATA lpwsadata); Über den Parameter wversionrequired gibt eine Applikation an, welche Version der Winsock-Bibliothek benötigt wird. Im High-Byte wird die Minor- und im Low-Byte die Major-Versionsnummer angegeben. Im Parameter lpwsadata liefert die Winsock-Bibliothek Details über die Implementierung der Bibliothek. Peter René Dietmüller Windows Sockets Seite 34

WSACleanup() Muß als letzte Winsock-Funktion aufgerufen werden, damit die Winsock-Bibliothek aufräumen kann. Für jeden Aufruf der Funktion WSAStartup() muß einen Aufruf von WSACleanup() geben. int PASCAL FAR WSACleanup(void); Peter René Dietmüller Windows Sockets Seite 35

select() Mit der Funktion select() kann man den Status eines oder mehrerer Sockets ermitteln. Damit ist es zum Beispiel möglich eine gewisse Zeit auf das Eintreffen von Daten zu warten und wenn keine Daten eintreffen einen Timeout auszulösen. int PASCAL FAR select( int nfds, /* not used, compatibility */ fd_set FAR *readfds, /* readable? */ fd_set FAR *writefds, /* writable? */ fd_set FAR *exceptfds /* exceptions? */ struct timeval FAR *timeout); /* timeout */ Peter René Dietmüller Windows Sockets Seite 36

gethostbyname() Diese Funktion liefert unter anderem die IP-Adresse eines Rechners. struct hostent FAR * PASCAL FAR gethostbyname(char FAR * name); struc hostent { char FAR * h_name; /* official host name */ char FAR * FAR * h_aliases; /* aliases */ short h_addrtype; /* address family */ short h_length; /* length of address */ char FAR * FAR * h_addr_list; /*addresses */ } Peter René Dietmüller Windows Sockets Seite 37

Beispiel WWWGet WWWGet ist ein einfaches Windowsprogramm, das eine HTML- Seite von einem WWW-Server holt. Dazu wird eine Verbindung zu einem WWW-Server auf Port 80 aufgebaut und das Kommando GET verschickt. Der WWW- Server sendet die im GET-Kommando angegebene HTML-Seite als Antwort zurück und schließt die Verbindung. Die empfangenen Daten werden ausgegeben. Peter René Dietmüller Windows Sockets Seite 38

WWWGet (2) #include <stdio.h> #include <string.h> #include <winsock.h> static int http_rcvget(socket s) { } char buffer[4096]; int i; int len; len = 1; while ((len!= 0) && (len!= SOCKET_ERROR)) { len = recv(s, buffer, sizeof(buffer), 0); for(i = 0; i < len; i++) putchar(buffer[i]); } return (len == 0); Peter René Dietmüller Windows Sockets Seite 39

WWWGet (3) static int http_sendget(socket s, const char *url) { } char cmd[200]; strcpy(cmd, "GET "); strcat(cmd, url); strcat(cmd, " HTTP/1.0"); strcat(cmd, "\n\n"); send(s, cmd, strlen(cmd), 0); return 1; Peter René Dietmüller Windows Sockets Seite 40

WWWGet (4) static void http_get(const char *server, const char *url) { int err; struct hostent *he; SOCKET s; struct sockaddr_in sin; WORD vr; WSADATA wsadata; /* -- Winsock initialisieren -- */ vr = MAKEWORD(2, 2); err = WSAStartup(vr, &wsadata); if (err!= 0) { printf("fehler beim Initialisieren der Winsock-Bibliothek.\n"); return; } Peter René Dietmüller Windows Sockets Seite 41

WWWGet (5) /* -- Namen auflösen -- */ he = gethostbyname(server); if (!he) { printf("der Server %s konnte nicht gefunden werden.\n", server); WSACleanup(); return; } /* -- Socket anlegen -- */ s = socket(af_inet, SOCK_STREAM, IPPROTO_TCP); if (s == INVALID_SOCKET) { printf("ein Socket konnte nicht angelegt werden.\n"); WSACleanup(); return; } Peter René Dietmüller Windows Sockets Seite 42

WWWGet (6) } /* -- Verbindung aufbauen -- */ memset(&sin, 0, sizeof(sin)); sin.sin_family = PF_INET; sin.sin_port = htons(80); memcpy(&sin.sin_addr, he->h_addr_list[0], sizeof(sin.sin_addr)); err = connect(s, (LPSOCKADDR)&sin, sizeof(sin)); if (err!= SOCKET_ERROR) { http_sendget(s, url); /* Befehl an WWW-Server senden */ if (!http_rcvget(s)) { /* Seite empfangen und ausgeben */ printf("fehler beim Empfangen der URL %s.\n", url); } closesocket(s); /* Verbindung schließen */ } else { printf("keine Verbindung: Server %s, Port %d.\n", server, 80); } WSACleanup(); Peter René Dietmüller Windows Sockets Seite 43

WWWGet (7) int main(int argc, char *argv[]) { printf("wwwget V1.1\n\n"); } /* -- Parameter -- */ if (argc!= 3) { printf("sie haben zu wenig Parameter angegeben.\n"); Usage(); } else { http_get(argv[1], argv[2]); } return 0; Peter René Dietmüller Windows Sockets Seite 44

Modi Blocking mode Die Winsock-Funktionen blockieren das Programm. In recv() wird zum Beispiel so lange gewartet, bis Daten empfangen wurden. Nonblocking mode (polling) Die Winsock-Funktionen blockieren das Programm nicht. Aus recv() wird zum Beispiel sofort zurückgekehrt, egal ob Daten empfangen wurden oder nicht. Asynchronous mode Die Winsock-Funktionen versenden Nachrichten beim Eintreffen bestimmter Ereignisse. Peter René Dietmüller Windows Sockets Seite 45

Modi (2) blocking non blocking asynchronous initiated.. processing.. completed initiated.. processing.. completed initiated.. processing.. completed Peter René Dietmüller Windows Sockets Seite 46

Quellen Bob Quinn, Dave Shute, Windows Sockets Network Programming, Addison Wesley, 1996 Bob Quinn, Winsock Development Information, http://www.sockets.com J. Reynolds, J. Postel, RFC1700 - ASSIGNED NUMBERS, 1994 MSDN Oktober 2000, Microsoft Corporation Peter René Dietmüller Windows Sockets Seite 47