Click here to Skip to main content
15,887,676 members
Home / Discussions / C / C++ / MFC
   

C / C++ / MFC

 
GeneralRe: win7 & vista's problem Pin
nenfa5-Feb-10 15:24
nenfa5-Feb-10 15:24 
QuestionConverting TCHAR to LPSTR to be used in CreateProcess [modified] Pin
lazy_panther28-Jan-10 0:57
lazy_panther28-Jan-10 0:57 
AnswerRe: Converting TCHAR to LPSTR to be used in CreateProcess Pin
Rajesh R Subramanian28-Jan-10 1:04
professionalRajesh R Subramanian28-Jan-10 1:04 
GeneralRe: Converting TCHAR to LPSTR to be used in CreateProcess Pin
lazy_panther28-Jan-10 1:30
lazy_panther28-Jan-10 1:30 
GeneralRe: Converting TCHAR to LPSTR to be used in CreateProcess Pin
Rajesh R Subramanian28-Jan-10 2:05
professionalRajesh R Subramanian28-Jan-10 2:05 
AnswerRe: Converting TCHAR to LPSTR to be used in CreateProcess Pin
KingsGambit28-Jan-10 1:06
KingsGambit28-Jan-10 1:06 
AnswerRe: Converting TCHAR to LPSTR to be used in CreateProcess Pin
Richard MacCutchan28-Jan-10 1:47
mveRichard MacCutchan28-Jan-10 1:47 
QuestionAbout select() in multithread Pin
luderjane28-Jan-10 0:10
luderjane28-Jan-10 0:10 
Dear all,

I have a question about Winsock.

My program is a TCP client which manipulates lots of socket connection concurrently.

One socket for each thread.

I use blocking mode at most of time, except creating a new connection to server.

I turn socket into non-blocking mode first, then use select() to check the socket before turning back.

I really don't want to waste time on uncertain blocking timeout and make sure the connection is established in the specific time.

Everything works well when most of server are reachable.

But here comes the question.

If the number of unreachable server increases(more than 5), the rest reachable server will fail on creating connection.

In this case, select() always return 0(means timeout) even though the server is originally reachable.

Here is the portion of my program to create connection:

Open(LPCTSTR addr, int port, DWORD dwTimeout)
{
    _socket = 0;

    SOCKET theSocket;
    int nRet;
    // Store information about the server
    LPHOSTENT lpHostEntry;
    lpHostEntry = gethostbyname(addr); // Specifying server by its name
    if (lpHostEntry == NULL) {
    return;
    }

    // Create the socket
    theSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (theSocket == INVALID_SOCKET) {
        return;
    }

    // Set socket to non-blocking mode
    unsigned long ul = 1;
    nRet = ioctlsocket(theSocket, FIONBIO, (unsigned long*)&ul);
    if (nRet == SOCKET_ERROR) {
        closesocket(theSocket);
        return;
    }

    // Use SOCKADDR_IN to fill in address information
    SOCKADDR_IN saServer;
    saServer.sin_family = AF_INET;
    saServer.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list);
    // ^ Address of the server being inserted into the address field
    saServer.sin_port = htons(port);

    // Connect to the server
    nRet = connect(theSocket,
                    (LPSOCKADDR)&saServer, // Server address
                    sizeof(struct sockaddr)); // Length of address structure
    if (nRet == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK) {
        closesocket(theSocket);
        return;
    }

    struct timeval timeout;
    fd_set r;
    FD_ZERO(&r);
    FD_SET(theSocket, &r);
    timeout.tv_sec = dwTimeout / 1000;
    timeout.tv_usec = (dwTimeout % 1000) * 1000;

    nRet = select(0, 0, &r, 0, &timeout);
    if (nRet <= 0 ) {
        closesocket(theSocket);
        return;
    }

    // Set socket to blocking mode
    ul= 0;
    nRet = ioctlsocket(theSocket, FIONBIO, (unsigned long*)&ul);
    if (nRet == SOCKET_ERROR){
        closesocket(theSocket);
        return;
    }

    _socket = theSocket;
}


Is there anything wrong in this code?

Or any constraint on the number of unreachable socket select() concurrently in multithread?
QuestionRe: About select() in multithread Pin
Moak28-Jan-10 8:00
Moak28-Jan-10 8:00 
AnswerRe: About select() in multithread Pin
luderjane1-Feb-10 20:16
luderjane1-Feb-10 20:16 
QuestionPainting in Win32, MFC and WPF ? Pin
Sameerkumar Namdeo27-Jan-10 23:19
Sameerkumar Namdeo27-Jan-10 23:19 
AnswerRe: Painting in Win32, MFC and WPF ? Pin
KingsGambit28-Jan-10 0:06
KingsGambit28-Jan-10 0:06 
QuestionCDocTemplate labelling a file yesAlreadyOpen after a document close Pin
maycockt27-Jan-10 23:02
maycockt27-Jan-10 23:02 
AnswerRe: CDocTemplate labelling a file yesAlreadyOpen after a document close Pin
Richard MacCutchan28-Jan-10 1:51
mveRichard MacCutchan28-Jan-10 1:51 
AnswerRe: CDocTemplate labelling a file yesAlreadyOpen after a document close Pin
krmed28-Jan-10 2:47
krmed28-Jan-10 2:47 
QuestionProblem in loading custom menu Pin
Anu_Bala27-Jan-10 21:31
Anu_Bala27-Jan-10 21:31 
AnswerRe: Problem in loading custom menu Pin
KingsGambit28-Jan-10 0:09
KingsGambit28-Jan-10 0:09 
AnswerRe: Problem in loading custom menu Pin
krmed28-Jan-10 2:32
krmed28-Jan-10 2:32 
QuestionDeselecting Tree Node Item in MFC Pin
RS.Ratheesh27-Jan-10 19:53
RS.Ratheesh27-Jan-10 19:53 
QuestionRe: Deselecting Tree Node Item in MFC Pin
David Crow28-Jan-10 3:42
David Crow28-Jan-10 3:42 
QuestionHow to use library files. Pin
Paulraj G27-Jan-10 19:52
Paulraj G27-Jan-10 19:52 
AnswerRe: How to use library files. Pin
CPallini27-Jan-10 21:04
mveCPallini27-Jan-10 21:04 
JokeRe: How to use library files. PinPopular
Nelek27-Jan-10 21:12
protectorNelek27-Jan-10 21:12 
GeneralRe: How to use library files. Pin
CPallini27-Jan-10 21:32
mveCPallini27-Jan-10 21:32 
JokeRe: How to use library files. Pin
Cedric Moonen27-Jan-10 21:47
Cedric Moonen27-Jan-10 21:47 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.