socket client中怎么指定本地端口

socket client中如何指定本地端口?
如题,我要用本机指定的端口去连接服务器,如何指定?

------解决方案--------------------
引用:
操作系统不让。

可以bind的,只不过通常没人这么用。
------解决方案--------------------
bind是把一个本地协议地址赋予一个套接字的。
 // Create a SOCKET for connecting to server
  SOCKET ConnectSocket;
  ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  if (ConnectSocket == INVALID_SOCKET) {
    printf("Error at socket(): %ld\n", WSAGetLastError());
    WSACleanup();
    return 1;
  }

  //----------------------
  // The sockaddr_in structure specifies the address family,
  // IP address, and port of the server to be connected to.
  sockaddr_in clientService; 
  clientService.sin_family = AF_INET;
  clientService.sin_addr.s_addr = inet_addr( "74.125.128.147" );
  clientService.sin_port = htons( 80 );


  sockaddr_in client;
  client.sin_family = AF_INET;
  client.sin_addr.s_addr = htonl(INADDR_ANY);
  client.sin_port = htons(12345);
  if (bind( ConnectSocket, (SOCKADDR*) &client, sizeof(client)) == SOCKET_ERROR) {
    printf("bind() failed.\n");
    closesocket(ConnectSocket);
    return 1;
  }


  //----------------------
  // Connect to server.
  if ( connect( ConnectSocket, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR) {
    printf( "Failed to connect.\n" );
    WSACleanup();
    return 1;
  }

  printf("Connected to server.\n");
  system("pause");

然后netstat -na 可以看到:
  TCP    x.x.x.x:12345  74.125.128.147:80      ESTABLISHED
x是我的本地地址,隐去了。74是www.google.com的
------解决方案--------------------
引用:
反正我是没见过谁绑定本地端口连接远程端口的。
《TCP/IP详解卷一:协议》

TCP/IP详解卷一里讲协议的,没有具体到bind函数吧。卷二里 15.8 bind系统调用,第一段说了客户通常不关心本地地址,不必调用bind。但不是指不能,不被允许调用bind
另见《UNIX 网络编程 卷1》 bind 部分。书的作者是同一人。
------解决方案--------------------
引用:
反正我是没见过谁绑定本地端口连接远程端口的。
《TCP/IP详解卷一:协议》

我也没见过客户端要用bind的情况,但不是说客户端不允许bind。
------解决方案--------------------