Solved

Trying to open a connection socket

Posted on 2002-03-18
4
191 Views
Last Modified: 2012-05-04
This is the code I am using to try to open a socket using
win32 APIs :

#include <Winsock2.h>
#include <string.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
     char url[14];
     SOCKET socket;
     SOCKADDR_IN ip_addrs;
     int connResult = 0;

     //Setting up the IP Address structure
     ip_addrs.sin_family = SOCK_STREAM;
     ip_addrs.sin_port = 25;
     ip_addrs.sin_addr.S_un.S_un_b.s_b1 = 189;
     ip_addrs.sin_addr.S_un.S_un_b.s_b2 = 136;
     ip_addrs.sin_addr.S_un.S_un_b.s_b3 = 145;
     ip_addrs.sin_addr.S_un.S_un_b.s_b4 = 10;

     printf("Starting mail application \n");
     printf("Name length = %d\n",sizeof(ip_addrs));

     
     connResult = connect(socket,(sockaddr*)&ip_addrs,sizeof(ip_addrs));
     if(connResult==0) printf("Connection OK...!\n");
     else printf("Connection Failed...!!!\n");
     return 0;
}

I think everything is ok. However, compilation fails and throws the following error :

Linking...
MainBlock.obj : error LNK2001: unresolved external symbol __imp__connect@12
Debug/MyMail2.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

MyMail2.exe - 2 error(s), 2 warning(s)

Any idea what could be happening? If not, please would you
let me know how to open a socket connection using win32 APIs?

NOT MFC PLEASE!

Thanks a lot for your time.
0
Comment
Question by:dyma82
  • 2
  • 2
4 Comments
 
LVL 86

Expert Comment

by:jkr
ID: 6878232
You are missing the import library - add

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

to your code. Furthermore, you need to call 'WSAStartup()' before using sockets, e.g.

#include <Winsock2.h>
#include <string.h>
#include <stdio.h>

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

int main(int argc, char* argv[])
{
    char url[14];
    SOCKET socket;
    SOCKADDR_IN ip_addrs;
    int connResult = 0;

    int             nErr                =   0;
    WORD            wVersionRequested;
    WSADATA         wsaData;
 
    wVersionRequested   =   MAKEWORD(   1,  1);

    if  (   nErr = WSAStartup   (   wVersionRequested,  &wsaData))
        {  
            printf  (   "\nunable to initialize WINSOCK, reason: %d\n",
                        nErr
                    );
            exit    (   0);
        }


    //Setting up the IP Address structure
    ip_addrs.sin_family = SOCK_STREAM;
    ip_addrs.sin_port = 25;
    ip_addrs.sin_addr.S_un.S_un_b.s_b1 = 189;
    ip_addrs.sin_addr.S_un.S_un_b.s_b2 = 136;
    ip_addrs.sin_addr.S_un.S_un_b.s_b3 = 145;
    ip_addrs.sin_addr.S_un.S_un_b.s_b4 = 10;

    printf("Starting mail application \n");
    printf("Name length = %d\n",sizeof(ip_addrs));

   
    connResult = connect(socket,(sockaddr*)&ip_addrs,sizeof(ip_addrs));
    if(connResult==0) printf("Connection OK...!\n");
    else printf("Connection Failed...!!!\n");
    return 0;
}


0
 
LVL 1

Author Comment

by:dyma82
ID: 6879868
Is not enough to "#include <Winsock2.h>" ?????

Do I still have to include the statement #pragma comment ( lib, "ws2_32.lib") ????
0
 
LVL 86

Accepted Solution

by:
jkr earned 50 total points
ID: 6879883
>>Is not enough to "#include <Winsock2.h>" ?????

No.

>>Do I still have to include the statement #pragma comment ( lib, "ws2_32.lib") ????

Yes.
0
 
LVL 1

Author Comment

by:dyma82
ID: 6879933
Thanks. That was the problem, but I would have understand it better if you would have told me that your solution meant to add the library Ws2_32.lib in the linker's path.

Any way thanks a million again.
p.s. You guys are doing a terrific job!
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Errors will happen. It is a fact of life for the programmer. How and when errors are detected have a great impact on quality and cost of a product. It is better to detect errors at compile time, when possible and practical. Errors that make their wa…
Written by John Humphreys C++ Threading and the POSIX Library This article will cover the basic information that you need to know in order to make use of the POSIX threading library available for C and C++ on UNIX and most Linux systems.   [s…
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.

932 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now