C ++ winsock在bind()上给出10038错误

时间:2012-07-02 08:27:18

标签: c++ sockets networking console winsock2

嗯,首先发布在这里,这个地方似乎遍布谷歌,我可以随时找到我的解决方案,不得不在任何网站/论坛中自问一个问题。但是,如果我冒了更多的子弹击中了这个想象下来的任何人发展了winock并射杀了他们(抱歉愤怒我认为我已经把每个岩石上的每块岩石翻过来都没有运气...... breeaatheee .... wheew)

我是网络编程的新手,但过去三年一直在使用C ++从事业余爱好,最近也在使用AS3。

我正在尝试编写一个服务器(对于客户端来说,我正在研究AS3项目),据我所知,这个SOCKET非常好。我不会重新创建它,多线程,没有重新分配或任何东西。没有滑稽的bisuness。只是试图将它全部设置好并且bind()正在吐出那个令人讨厌的10038在我脸上。

我看过MSDN,我非常清楚10038意味着“尝试在无效套接字上进行操作”;对于我的生活,我无法看到它的无效。

但是我的漫无边际,继承了代码:( functions.h是空的,havnt已经走得那么远了)

 //Server for Project7 - Client written in AS3 under FlashDevelop. Developed under and for the Windows Operating System Enviroment
//All connections handled under TCP/IP on port 3011
//Client is URL locked to www.cutdev.com
//Copyright Tyler Buchinski 2012 All Rights Reserved
#include <iostream>
#include "functions.h"

#define WIN32_MEAN_AND_LEAN

#include <winsock2.h>
#include <windows.h>


        using namespace std;

int main()
{

    const int iReqWinsockVer = 2;   // Minimum winsock version required

WSADATA wsaData;

  if (WSAStartup(MAKEWORD(iReqWinsockVer,0), &wsaData)==0)
  {
    // Check if major version is at least iReqWinsockVer
    if (LOBYTE(wsaData.wVersion) >= iReqWinsockVer)
    {

        SOCKET SocketListen;
        SocketListen = (AF_INET,SOCK_STREAM,IPPROTO_TCP);


            if(SocketListen == INVALID_SOCKET)
                {
                    cout << "ERROR - could not creaate listening socket." << endl;
                    system("pause");

                    return 4;
                }

            sockaddr_in Listener, Channel1;

            Listener.sin_family = AF_INET;
            Listener.sin_port = htons(3011);
            Listener.sin_addr.S_un.S_addr = INADDR_ANY;

            int err = bind(SocketListen,(sockaddr*)(&Listener),sizeof(Listener));
            if (!err == 0)
                {
                    cout << "Listener binding failed!" << endl;
                    cout << err << endl;
                    cout << WSAGetLastError();

                    return 3;
                }



    }
    else
    {
        // Required version not available
        cout <<"Required version of Winsock not installed." << endl;
    }

    // Cleanup winsock
    if (!WSACleanup() == 0)
    {
        // cleanup failed
        cout << "WSACleanup Failed!!" << endl;
        system("pause");
    }
  }
  else
  {
    cout << "WSA Startup failed!" << endl;
  }
    return 0;
}

提前感谢您的帮助! -Tyler

1 个答案:

答案 0 :(得分:2)

错误10038WSAENOTSOCK

  

尝试对非套接字的操作进行操作。

     

如果s参数中的描述符不是套接字,则返回此错误。

这是因为您省略了对socket()的调用而SocketListen包含IPPROTO_TCP常量的值而不是套接字描述符:

SocketListen = (AF_INET,SOCK_STREAM,IPPROTO_TCP);

应该成为:

SocketListen = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);