Je rencontre un problème lors de l'obtention du numéro de port de destination dans la fonction WSPSend dans l'exemple LSP fourni avec Microsoft Platform SDK.Obtenir le port de destination dans WSPSend
Voici le code que j'utilise. Comme indiqué ci-dessous, l'instruction if n'est pas entrée. J'ai vérifié cela en utilisant une fonction de débogage.
Je suis en train de reconnaître les paquets HTTP sortants à l'intérieur de cette fonction à l'aide du port de destination 80.
int WSPAPI
WSPSend(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesSent,
DWORD dwFlags,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
LPWSATHREADID lpThreadId,
LPINT lpErrno
)
{
INT ret = SOCKET_ERROR;
SOCK_INFO *SocketContext = NULL;
LPWSAOVERLAPPEDPLUS ProviderOverlapped = NULL;
*lpErrno = NO_ERROR;
//
// Find our provider socket corresponding to this one
//
SocketContext = FindAndRefSocketContext(s, lpErrno);
if (NULL == SocketContext)
{
dbgprint("WSPSend: FindAndRefSocketContext failed!");
goto cleanup;
}
// My code starts here!!!
SOCKET app = SocketContext->LayeredSocket;
struct sockaddr FAR name;
int FAR namelen;
getpeername(app, &name, &namelen);
struct sockaddr_in sin;
sin =* (const struct sockaddr_in *) (&name);
if(sin.sin_port == htons(80))
{
// This code is not executed after sending HTTP packets!!
}
}
Toute idée?
J'ai vérifié la valeur de retour du getpeername. Il n'a pas retourné 0! – Khaled
@Khaled - c'est une information utile - définissez 'namelen' comme' sizeof (struct sockaddr) 'et cela devrait fonctionner mieux. –
Merci beaucoup. Cela a fonctionné maintenant. – Khaled