2016-09-27 4 views
0

나는 getsockopt 함수를 사용하여 MSS를 얻으면 문제가 발생합니다. 음수 (또는 0)가 있습니다. 하지만 함수가 성공하면 소켓은 올바른 값인 hSocketService이 정확하고 작동합니다.getsockopt가 음수 mss (CLion 상)

그래서 내가 가지고 : 나는 코드를 실행하는거야 것을 정확한 깜빡

int tailleMsgRecu, nbreBytesRecus, finDetectee, tailleS, tailleO; 


/* 7. Recherche du MTU -*-Mache pas-*-*/ 
    tailleO=sizeof(int); 
    if (getsockopt(hSocketService, IPPROTO_TCP, TCP_MAXSEG, &tailleS, &tailleO) == -1) 
    { 
     printf("Erreur sur le getsockopt de la socket %d\n", errno); 
     exit(1); 
    } 
    else 
    { 
     printf("getsockopt OK\n"); 
     printf("Taille maximale d'un segment = %d\n", tailleS); 
    } 

감사

편집 : 여기

getsockopt OK Taille maximale d'un segment = -13312 

코드입니다 Cygwin을 Clion과 함께 사용하는 Windows.

는 I 코드를 변경하고 현재 tailleSsocklen_t 형이며, 그 결과는이다 Taille maximale d'un segment = 0printf("Taille maximale d'un segment = %u\n", tailleS); 으로 그 값을 인쇄.

문제가 여전히 동일하므로 getsockopt가 작동하고 있어도 올바른 가치를 얻지 못합니다. 당신은, 그러나, 부호있는 정수를 사용합니까 -

+0

이라는 것을 알고있을 것 너 이걸 시도해? 소켓이 연결되어 있습니까? – EJP

답변

1

귀하의 tailleS 변수는 대부분의 플랫폼 상에 부호 값으로 해결 유형 socklen_t이어야합니다. 이것은 가치를 무너 뜨립니다.

이 값을 인쇄하려면 %u 형식 지정자를 사용하여 printf에이 변수가 서명되지 않았 음을 알리십시오.

그리고 마지막 말 : 당신은 당신이 검색하는 것은 MTU 아니라, 어떤 시점에서 다른 일이 아니라 TCP 세그먼트 크기 (가까운,하지만 여전히 다른)

+0

당신이 제안한 변화와 함께, 나는 getsockopt OK Taille maximale d' un segment = 4294953984'을 얻었다. 예, 알고 있습니다. tcp seg size는 내가 원하는 것입니다. 걱정하지 마십시오. –

+0

그리고 tailleS 타입의 socklen_t를 가지고 있습니다. Taille maximale d' un segment = 0'을 받았습니다. –

+0

위의 코드를 * 작동 안함? – tofro