1. 程式人生 > >C/C++:Socket中的bind函式衝突問題

C/C++:Socket中的bind函式衝突問題

       最近學習了C/C++下的關於UDP部分的內容,在實際編寫程式碼中遇到了Socket中的bind函式(用於繫結本地埠)衝突問題。而且很奇怪的是這一部分程式碼在CLion下並沒有出現問題,在編寫了JNI之後放在Android Studio下編譯時發生了衝突,出現了錯誤提示:bind函式型別不匹配,原因很簡單,在標頭檔案<functional>裡面有bind函式,而<sys/socket>下也有自己的bind,這就導致了衝突。

具體程式碼段如下:

if(bind(sockfd, (struct sockaddr *)&server, sizeof(server)) == -1) {
        perror("Bind socket error ");
        close(sockfd);
        exit(1);
    }

本人在網上也試了幾種不同的解決方法,列舉如下,但不知為何都沒有解決問題

  1. 不使用using namespace std,在需要用socket的bind時用bind(),其他則使用std::bind();
  2. 直接在bind前加::,即使用::bind();可返回socket下的地址空間。                                        

在嘗試無果後,抱著曲線救國的試試態度,我在專案工程下的其他標頭檔案中封裝了一個bindport函式如下:

static int bindport(int sockfd; struct sockaddr* sock; socklen_t sock_len){
        int ret = bind(sockfd,sock,sock_len);
        return ret;
}

在需要用到bind()函式的使用引用bindport函式,至此,問題解決。