2013-05-30 9 views
0

그래서 SCTP를 시작하고 SCTP 서버 응용 프로그램의 기본 기능을 작성했습니다 (피어 - 투 - 피어 응용 프로그램으로 변경하려고합니다). 코드가 불완전하지만 소켓 옵션을 테스트하기 위해 컴파일하고 실행했는데 첫 번째 setsockopt가 오류 10042 (프로토콜이 지원되지 않음)를 반환합니다. 나는 그것이 오류를 반환하는 setsockopt()의 첫 번째 호출이라고 판단했다. (롤 지금에 대한 )Setsockopt()가 오류 번호를 반환 함 10042

#include "stdafx.h" 
#include <iostream> 
#include <iostream> 
#include <string.h> 
#include <stdlib.h> 

#ifndef UNICODE 
#define UNICODE 
#endif 

#define WIN32_LEAN_AND_MEAN 

#include <WinSock2.h> 
#include <WS2tcpip.h> 
#include <WS2spi.h> 
#include <ws2sctp.h> 
#include <wsipv6ok.h> 
#include <if.h> 
#include "ws2isatap.h" 
#include "if_tunnel.h" 





#pragma comment(lib, "ws2_32.lib") 
#pragma comment(lib, "sctpsp.lib") 


using namespace std; 
using namespace System; 

static int LISTENQ = 5; 

void isatap_enable(void); 

int main(int argc, char* argv[]){ 



WSADATA wsaData; 
    int iResult; 
    int optv = 10; 
    u_long imode = 1; 
    bool connected = false; 
    char *optval = (char*)&optv; 
    int optlen = sizeof(optval); 
    sockaddr_in6 servAddr; 
    sctp_sndrcvinfo sr; 
    sctp_event_subscribe evnts; 
    sctp_initmsg init; 



    memset(&sr,0,sizeof(sr)); 
    memset(&evnts,0,sizeof(evnts)); 
    memset(&init,0,sizeof(init)); 
    memset(&servAddr,0,sizeof(servAddr)); 



    iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); 
    if (iResult != NO_ERROR) { 
     wprintf(L"WSAStartup function failed with error: %d\n", iResult); 
     return 1; 
    } 




    SOCKET servSock = socket(AF_INET6,SOCK_STREAM,IPPROTO_SCTP); 
    if(servSock==INVALID_SOCKET){ 
     printf("Socket function failed with error: %d\n",GetLastError()); 
     return 1; 
    } 


    if(setsockopt(servSock,IPPROTO_IPV6,IPV6_PROTECTION_LEVEL,optval,sizeof(optval))<0){ 
     printf("setsockopt function failed with error: %d\n", GetLastError()); 
     return 1; 
    } 





    u_int servPort = 5000; 
    servAddr.sin6_family = AF_INET6; 
    servAddr.sin6_addr = in6addr_any; 
    servAddr.sin6_port = htons(servPort); 



    if(setsockopt(servSock,IPPROTO_SCTP,SCTP_EVENTS,(const char*)&evnts,sizeof(evnts)) < 0){ 
     printf("setsockopt function failed with error: %d\n", GetLastError()); 
     return 1; 
    } 




    ioctlsocket(servSock,FIONBIO, &imode); 

    if(bind(servSock,(struct sockaddr*)&servAddr,sizeof(servAddr))<0){ 
     printf("Bind function failed with error: %d\n", GetLastError()); 
     return 1; 
    } 

    evnts.sctp_data_io_event = 1; 
    evnts.sctp_association_event = *(u_char*)optval; 

    for(;;){ 

     if(listen(servSock,LISTENQ) < 0){ 
     printf("Listen function failed with error: %d/n",GetLastError()); 
     return 1; 
     }else{ 

      printf("Listening on port %d\n",servPort); 
     } 














    } 


} 

답변