Toon posts:

[c] ioctlsocket/socket

Pagina: 1
Acties:

Verwijderd

Topicstarter
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...
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