KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have a problem with a boost::asio::ip::tcp::iostream. I am trying to send about 20 raw bytes. The problem is that this 20 byte payload is split into two TCP packets with 1 byte, then 19 bytes. Simple problem, why it is happening I have no idea. I am writing this for a legacy binary protocol that very much requires the payload to fit in a single TCP packet (groan). Pasting the whole source from my program would be long and overly complex, I've posted the functional issue just within 2 functions here (tested, it does reproduce the issue); #include <iostream> // BEGIN cygwin nastyness // The following macros and conditions are to address a Boost compile // issue on cygwin. https://svn.boost.org/trac/boost/ticket/4816 // /// 1st issue #include <boost/asio/detail/pipe_select_interrupter.hpp> /// 2nd issue #ifdef __CYGWIN__ #include <termios.h> #ifdef cfgetospeed #define __cfgetospeed__impl(tp) cfgetospeed(tp) #undef cfgetospeed inline speed_t cfgetospeed(const struct termios *tp) { return __cfgetospeed__impl(tp); } #undef __cfgetospeed__impl #endif /// cfgetospeed is a macro /// 3rd issue #undef __CYGWIN__ #include <boost/asio/detail/buffer_sequence_adapter.hpp> #define __CYGWIN__ #endif // END cygwin nastyness. #include <boost/array.hpp> #include <boost/asio.hpp> #include <iostream> typedef boost::asio::ip::tcp::iostream networkStream; void writeTestingData(networkStream* out) { *out << "Hello world." << std::flush; // *out << (char) 0x1 << (char) 0x2 << (char) 0x3 << std::flush; } int main() { networkStream out("192.168.1.1", "502"); assert(out.good()); writeTestingData(&out); out.close(); } To add to the strange issue, if I send the string "Hello world.", it goes in one packet. If I send 0x1, 0x2, 0x3 (the raw byte values), I get 0x1 in packet 1, then the rest of the data in the nex
Tags (comma-separated)
Save Edits
Cancel