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

Posted on 2004-09-11
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

Accepted Solution

bsnh99 earned 50 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

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Preface I don't like visual development tools that are supposed to write a program for me. Even if it is Xcode and I can use Interface Builder. Yes, it is a perfect tool and has helped me a lot, mainly, in the beginning, when my programs were small…
This tutorial is posted by Aaron Wojnowski, administrator at  To view more iPhone tutorials, visit This is a very simple tutorial on finding the user's current location easily. In this tutorial, you will learn ho…
The goal of this video is to provide viewers with basic examples to understand and use structures 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.

749 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