Ik heb een probleem met ioctlsocket(sockfd,FIONREAD,&bytes) het returnt altijd 0 bytes naar bytes waardoor ik niet kan zien of ik wel de hele pakket heb binnen gehaald of niet....
Zie hieronder source en verder...
Ik heb de orginele source ingekort om het probleem te analyseren echter dit is niet gelukt. Mijn vraag is werkt
ioctlsocket uberhaupt wel? en zie ik hier wat over het hoofd?
De output is van dit progje:
Zie hieronder source en verder...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
| #include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
#define PORT 110
#define MAXDATASIZE 100
int main(int argc, char *argv[])
{
int sockfd, numbytes;
char buf[MAXDATASIZE];
u_long bytes;
struct hostent *he;
struct sockaddr_in their_addr; // connector's address information
WSADATA wsaData;
if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) {
fprintf(stderr, "WSAStartup failed.\n");
exit(1);
}
if (argc != 2) {
fprintf(stderr,"usage: client hostname\n");
exit(1);
}
if ((he=gethostbyname(argv[1])) == NULL) { // get the host info
perror("gethostbyname");
exit(1);
}
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(1);
}
their_addr.sin_family = AF_INET; // host byte order
their_addr.sin_port = htons(PORT); // short, network byte order
their_addr.sin_addr = *((struct in_addr *)he->h_addr);
memset(&(their_addr.sin_zero), '\0', 8); // zero the rest of the struct
if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1) {
perror("connect");
exit(1);
}
ioctlsocket(sockfd, FIONREAD, &bytes);
if ((numbytes=recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1)
{
perror("recv"); exit(1);
}
buf[numbytes] = '\0';
printf("%s\nBytes: %d van de %d\n",buf,strlen(buf),bytes);
close(sockfd);
return 0;
} |
Ik heb de orginele source ingekort om het probleem te analyseren echter dit is niet gelukt. Mijn vraag is werkt
ioctlsocket uberhaupt wel? en zie ik hier wat over het hoofd?
De output is van dit progje:
code:
1
2
3
| +OK cablewanadoo.nl POP3 PROXY server ready - v59327.5ahu Bytes: 59 van de 0 |