He cerrado el socket VC 9903. ¿Por qué la próxima vez que cree este socket, el número asignado sigue siendo 9903 y todavía hay datos en él?
y BOOL bReuseaddr = TRUE
Use setsockopt (s, SOL_SOCKET, SO_REUSEADDR (para const char *) & bReuseaddr size (BOOL));
2. Un SOKET que ya está en un estado de conexión forzada no experimentará TIME_WAIT al llamar a closesocket.
:
BOOL bDontLinger = FALSE;
p>Utilice setsockopt(s, SOL_SOCKET, SO_DONTLINGER, (para const char *) & bDontLinger en sizeof(BOOL));
Durante el proceso de envío () y recepción (), a veces debido a las condiciones de la red y otras razones, no se puede esperar el envío y la recepción
,
Interpretación nNetTimeout = 1000; // segundos
//Límite de tiempo de envío
Usa setsockopt (socket, SOL_S0CKET, SO_SNDTIMEO (char *) nNetTimeout, es sizeof();
Enviar( ), proceso recv (), a veces debido a las condiciones de la red y otras razones, no se puede esperar el envío y la recepción.
int));
// límite de tiempo de recepción usando setsockopt (socket, SOL_S0CKET SO_RCVTIMEO, (CHAR *) nNetTimeout, es sizeof (int)); enviando Bytes (sincrónicos) o Bytes/(asincrónicos) enviados al búfer del socket de forma predeterminada, el sistema envía y recibe 8688 bytes (aproximadamente 8,5 K), en el proceso de envío de datos.
Se puede configurar mayor que los datos en el búfer del socket para evitar que el transceptor haga un bucle constante al enviar (), RECV ():
//Recibir búfer
Interpretación nRecvBuf = 32 * 1024 ;/ / Establecer 32K
Utilice setsockopt (s, SOL_SOCKET, SO_RCVBUF, (para const char * ) nRecvBuf, es sizeof (int));
//Enviar área de búfer
Interpretación nSendBuf = 32 * 1024;
Utilice setsockopt(, SOL_SOCKET en SO_SNDBUF, (para const char *) nSendBuf, es sizeof (int)); no quieren pasar por una copia del búfer del socket en el búfer del sistema
El programa afectará el rendimiento:
Interprete nZero = 0 BR /> use setsockopt (socket; , SOL_S0CKET SO_SNDBUF, (CHAR *) nZero sizeof(nZero));
Ibid. arriba (de forma predeterminada, el contenido del búfer del socket se copia en el área del búfer del sistema): p>
interpreta nZero = 0;
función setsockopt (socket SO_RCVBUF SOL_S0CKET, (CHAR *) nZero como sizeof(int)); que el socket tiene la función de enviar datos por difusión:
BOOL bBroadcast = TRUE
Utilice socketsockopt (SOL_SOCKET, SO_BROADCAST, (S, para const char *) &bBroadcast en sizeof (int ));
Utilice socketsockopt (SOL_SOCKET, SO_BROADCAST, (S, para const char *) &bBroadcast en sizeof (BOOL));
8 Conéctese al cliente durante el proceso del servidor. , si su socket está en modo sin bloqueo, establezca el retraso de conexión () en el proceso de conexión ()
hasta que se llame a accpet () (esta función solo juega un papel sin bloqueo significativo en este proceso). rol
, llamado en funciones de bloqueo)
BOOL bConditionalAccept = TRUE;
Utilice setsockopt (s, en SOL_SOCKET, SO_CONDITIONAL_ACCEPT, (para const char *) & bConditionalAccept, tamaño de (BOOL));
Aquí
En este proceso, los datos se envían primero (el método send () aún no se ha completado, no se envían datos), luego se cierra el socket () y luego generalmente adoptamos un apagado "acomodado" (S, SD_BOTH) mide, pero los datos definitivamente se perderán. ¿Cómo configurar el programa en una aplicación específica para cumplir con los requisitos de
estructura inquietante {
u_short l_onoff;
u_short l_linger
inquietante m_sLinger
m_sLinger.l_onoff = 1 ;/ / (Cuando se llama a closesocket close(), pero mientras permanezca allí, los datos no se enviarán después)
//. Si m_sLinger.l_onoff = 0, los datos no se enviarán posteriormente. Si m_sLinger.l_onoff = 0, la función funciona igual que 2);
m_sLinger.l_linger = 5;/ / (se permite permanecer allí durante 5 segundos)
función setsockopt ( , SOL_SOCKET, SO_LINGER, (para const char *) & m_sLinger en sizeof (linger));