2009-07-02 3 views

답변

3

두 가지 가능성이 있습니다.

1) 일반 C/Unix 스타일 소켓을 사용할 수 있으므로 처음에는 소켓을 만든 다음 추가 할 소켓을 포함하여 setsockopt()를 사용하여 옵션을 설정합니다 (지원되는 경우 먼저 확인할 수 있음).), 마지막으로 CFSocketCreateWithNative()를 사용하여 CFSocket을 만듭니다.

2) 당신은 CF API는,

CFSocketSendData 
Sends data over a CFSocket object. 

CFSocketError CFSocketSendData (
    CFSocketRef s, 
    CFDataRef address, 
    CFDataRef data, 
    CFTimeInterval timeout 
); 

당신은 소켓 옵션 SO_SNDTIMEO 설정에 해당하는 제한 시간을 설정할 수 있습니다 예를 들어 직접 사용합니다.

CFSocketCreateConnectedToSocketSignature 
Creates a CFSocket object and opens a connection to a remote socket. 

CFSocketRef CFSocketCreateConnectedToSocketSignature (
    CFAllocatorRef allocator, 
    const CFSocketSignature *signature, 
    CFOptionFlags callBackTypes, 
    CFSocketCallBack callout, 
    const CFSocketContext *context, 
    CFTimeInterval timeout 
); 

친절한 의견입니다.

4

traceroute의 YA 변형을 쓰고 있습니까? ;)

그렇습니다. 평범한 C 소켓 API는 보통 setsockopt()과 같이 IP_TTL 소켓 옵션 (IPv4 용) 또는 IPV6_UNICAST_HOPS (IPv6 용)이라고 부릅니다.

1

CocoaAsyncSocket 라이브러리를 사용했습니다. 여기에는 하위 소켓 API에 대한 Obj-C 래퍼 인 AsyncUdpSocket이라는 클래스가 포함되어 있습니다. 나는 소켓의 TTL을 설정하는 메소드를 추가했다.

-(BOOL)setTTL:(int) ttlValue { 

    int socketFD = SOCKET_NULL; 

    if (socket4FD != SOCKET_NULL) { 
     socketFD = socket4FD; 
    } 
    else{ 
     if (socket6FD != SOCKET_NULL) { 
      socketFD = socket6FD; 
     } 
     else{ 
      NSLog(@"ERROR: TTL - No Socket Found!"); 
      return NO; 
     } 
    } 

    int status = setsockopt(socketFD, IPPROTO_IP, IP_TTL, &ttlValue, sizeof(ttlValue)); 

    if (status == -1){ 
     NSLog(@"Error: TTL not set!"); 
     return NO; 
    } 

    NSLog(@"TTL: %d", ttlValue); 
    return YES; 
    } 

나는 IPv4 만 그것을 테스트했습니다. IPv6의 경우 으로 시도하십시오. IPv6_UNICAST_HOPS