Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win


sockets - send(), recv(), TCP, UDP

Posted on 2004-09-11
Medium Priority
Last Modified: 2008-03-10
Hi !!

I had a few queries regarding the send(), recv() functions, and was hoping

someone could help me out ... :)

Blocking Sockets

(1)  I do a send on a TCP Connection. suppose i'm sending 10240 bytes. will

the send return before all the bytes have been sent (will it return with a

value of 2400 for example, meaning that it sent only 2400 bytes), or will it

always return only after all 10240 bytes have been sent ? (it might return

with a smaller value if the socket was closed before everything could be

sent, but will it return with a smaller value in any other scenario?)

(2) for point (1), What about UDP? will the function only return after all

the data has been sent? and what about the recv function in case of udp? does

it receive all the data at one shot (assuming i pass in a sufficiently large


(3) suppose in one thread, i call send with a huge amount of data to be sent

(e.g. 2 mb) (TCP socket). while this send is progressing, i call send on the

same socket from another thread. will any error be thrown? or will the data

in the second thread be sent after the send returns in the first thread?

(4) for point (3), what will happen if i use a UDP socket instead?

(5) i'm on a 10/100 mbps LAN. I will be calling send quite frequently, say

once every 4 seconds) If i use UDP instead of TCP, will it be faster or

slower? (all the destination PCs are on the same LAN, and in case of TCP, i

will be creating the socket and connect()-ing only once, during

initialization, and not every time i need to do a send.) (i know, udp is less

reliable, but would this unreliability be very much pronounced on a 10/100

mbps LAN?)

thanks :)

Question by:muskad202
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions

Accepted Solution

bsnh99 earned 200 total points
ID: 12036773
1. For TCP, it should generally send all of the data without returning a short count. You should still check the return value to make sure you didn't get some kind of error (e.g. if remote closes connection before data finishes sending).

2. No. UDP is unreliable. If you try to send too much data at once, you'll overwhelm the socket and it will almost certainly drop some of the data. I think (not sure on this one), that if recv() gets the UDP packet, it will contain the entire packet. Note that it is possible that recv() will miss a packet, and it is possible for recv() to get packets out of order. Your protocol should handle these possibilities.

3. I'd suggest using a separate socket for each thread. You don't say what platform you're on, and socket libraries aren't necessarily thread-safe. You could check the documentation for your socket library.

4. Same as #3.

5. The decision of UDP vs TCP can depend on a number of variables. What kind of protocol are you using? Will you have to retransmit UDP packets if they are dropped? If you can describe the nature of your application a little more, I might be able to suggest one over the other.

Hope this helps.

Author Comment

ID: 12037104
thanks :)

Featured Post


Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

Question has a verified solution.

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

Windows programmers of the C/C++ variety, how many of you realise that since Window 9x Microsoft has been lying to you about what constitutes Unicode (http://en.wikipedia.org/wiki/Unicode)? They will have you believe that Unicode requires you to use…
Examines three attack vectors, specifically, the different types of malware used in malicious attacks, web application attacks, and finally, network based attacks.  Concludes by examining the means of securing and protecting critical systems and inf…
The goal of this video is to provide viewers with basic examples to understand opening and writing to files in the C programming language.
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use while-loops in the C programming language.

610 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