C'è qualche vantaggio nell'uso delle funzioni API di windows winsock rispetto alle funzioni socket in stile BSD?

StackOverflow https://stackoverflow.com/questions/274309

  •  07-07-2019
  •  | 
  •  

Domanda

C'è qualche vantaggio su Windows nell'usare le funzioni Winsock WSA rispetto a quelle in stile BSD?

È stato utile?

Soluzione

La differenza più significativa è la disponibilità di API in stile evento asincrono in Winsock.

Con i socket Berkeley, ogni volta che read o write l'applicazione " bloccherà " fino a quando la rete non è pronta, il che potrebbe non rispondere all'applicazione (a meno che l'I / O di rete non sia gestito in un thread diverso).

Con un'interfaccia asincrona, è possibile disporre che una funzione di callback venga chiamata come parte del normale ciclo di messaggi di Windows ogni volta che si ricevono dati o quando il buffer di trasmissione è vuoto.

Altri suggerimenti

Solo se prevedi di distribuirlo su una piattaforma legacy come Windows 95 o c'è qualcosa nell'API Winsock di cui non puoi assolutamente vivere e non vuoi lanciarti (< - dubbio) .

Se si progetta attorno al paradigma BSD, il codice può funzionare su altre piattaforme con meno porting. Se supponi che la tua libreria di rete supporterà l'I / O asincrono (come menzionato da Alnitak), dovrai fare molto più lavoro se viene estratto da sotto di te.

Naturalmente, se sei sicuro che non lascerai mai il caldo seno di Microsoft, sentiti libero di andare in città.

Rispetto alla risposta di Alnitak, sono d'accordo: aggiungerei semplicemente che non è necessario utilizzare un ciclo di messaggi per utilizzare le operazioni asincrone sui socket. L'uso delle porte di completamento I / O è un modo molto scalabile per creare un'applicazione di rete ad alte prestazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top