return 0;
}
-static void setSocketBuffer(int fd, int optname, uint32_t size)
-{
- uint32_t psize=0;
- socklen_t len=sizeof(psize);
-
- if(!getsockopt(fd, SOL_SOCKET, optname, (char*)&psize, &len) && psize > size) {
- if (!g_quiet) {
- cerr<<"Not decreasing socket buffer size from "<<psize<<" to "<<size<<endl;
- }
- return;
- }
-
- if (setsockopt(fd, SOL_SOCKET, optname, (char*)&size, sizeof(size)) < 0 ) {
- if (!g_quiet) {
- cerr<<"Warning: unable to raise socket buffer size to "<<size<<": "<<stringerror()<<endl;
- }
- }
-}
-
-
-static void setSocketReceiveBuffer(int fd, uint32_t size)
-{
- setSocketBuffer(fd, SO_RCVBUF, size);
-}
-
-static void setSocketSendBuffer(int fd, uint32_t size)
-{
- setSocketBuffer(fd, SO_SNDBUF, size);
-}
-
static ComboAddress getRandomAddressFromRange(const Netmask& ecsRange)
{
ComboAddress result = ecsRange.getMaskedNetwork();
for(int i=0; i < 24; ++i) {
auto sock = make_unique<Socket>(dest.sin4.sin_family, SOCK_DGRAM);
// sock->connect(dest);
- setSocketSendBuffer(sock->getHandle(), 2000000);
- setSocketReceiveBuffer(sock->getHandle(), 2000000);
+ try {
+ setSocketSendBuffer(sock->getHandle(), 2000000);
+ }
+ catch (const std::exception& e) {
+ if (!g_quiet) {
+ cerr<<e.what()<<endl;
+ }
+ }
+ try {
+ setSocketReceiveBuffer(sock->getHandle(), 2000000);
+ }
+ catch (const std::exception& e) {
+ if (!g_quiet) {
+ cerr<<e.what()<<endl;
+ }
+ }
+
sockets.push_back(std::move(sock));
}
new thread(recvThread, &sockets);
} s_idmanager;
-
-static void setSocketBuffer(int fd, int optname, uint32_t size)
-{
- uint32_t psize=0;
- socklen_t len=sizeof(psize);
-
- if(!getsockopt(fd, SOL_SOCKET, optname, (char*)&psize, &len) && psize > size) {
- cerr<<"Not decreasing socket buffer size from "<<psize<<" to "<<size<<endl;
- return;
- }
-
- if (setsockopt(fd, SOL_SOCKET, optname, (char*)&size, sizeof(size)) < 0 )
- cerr<<"Warning: unable to raise socket buffer size to "<<size<<": "<<stringerror()<<endl;
-}
-
-static void setSocketReceiveBuffer(int fd, uint32_t size)
-{
- setSocketBuffer(fd, SO_RCVBUF, size);
-}
-
-static void setSocketSendBuffer(int fd, uint32_t size)
-{
- setSocketBuffer(fd, SO_SNDBUF, size);
-}
-
-
struct AssignedIDTag{};
struct QuestionTag{};
if(g_vm.count("source-ip") && !g_vm["source-ip"].as<string>().empty())
s_socket->bind(ComboAddress(g_vm["source-ip"].as<string>(), g_vm["source-port"].as<uint16_t>()));
- setSocketReceiveBuffer(s_socket->getHandle(), 2000000);
- setSocketSendBuffer(s_socket->getHandle(), 2000000);
+ try {
+ setSocketReceiveBuffer(s_socket->getHandle(), 2000000);
+ }
+ catch (const std::exception& e) {
+ cerr<<e.what()<<endl;
+ }
+ try {
+ setSocketSendBuffer(s_socket->getHandle(), 2000000);
+ }
+ catch (const std::exception& e) {
+ cerr<<e.what()<<endl;
+ }
ComboAddress remote(g_vm["target-ip"].as<string>(),
g_vm["target-port"].as<uint16_t>());
return ComboAddress(input, port);
}
}
+
+void setSocketBuffer(int fd, int optname, uint32_t size)
+{
+ uint32_t psize = 0;
+ socklen_t len = sizeof(psize);
+
+ if (!getsockopt(fd, SOL_SOCKET, optname, &psize, &len) && psize > size) {
+ throw std::runtime_error("Not decreasing socket buffer size from " + std::to_string(psize) + " to " + std::to_string(size));
+ }
+
+ if (setsockopt(fd, SOL_SOCKET, optname, &size, sizeof(size)) < 0) {
+ throw std::runtime_error("Unable to raise socket buffer size to " + std::to_string(size) + ": " + stringerror());
+ }
+}
+
+void setSocketReceiveBuffer(int fd, uint32_t size)
+{
+ setSocketBuffer(fd, SO_RCVBUF, size);
+}
+
+void setSocketSendBuffer(int fd, uint32_t size)
+{
+ setSocketBuffer(fd, SO_SNDBUF, size);
+}
extern template class NetmaskTree<bool>;
ComboAddress parseIPAndPort(const std::string& input, uint16_t port);
+
+/* These functions throw if the value was already set to a higher value,
+ or on error */
+void setSocketBuffer(int fd, int optname, uint32_t size);
+void setSocketReceiveBuffer(int fd, uint32_t size);
+void setSocketSendBuffer(int fd, uint32_t size);
static void handleUDPServerResponse(int fd, FDMultiplexer::funcparam_t&);
-static void setSocketBuffer(int fd, int optname, uint32_t size)
-{
- uint32_t psize=0;
- socklen_t len=sizeof(psize);
-
- if(!getsockopt(fd, SOL_SOCKET, optname, (char*)&psize, &len) && psize > size) {
- g_log<<Logger::Error<<"Not decreasing socket buffer size from "<<psize<<" to "<<size<<endl;
- return;
- }
-
- if (setsockopt(fd, SOL_SOCKET, optname, (char*)&size, sizeof(size)) < 0) {
- int err = errno;
- g_log << Logger::Error << "Unable to raise socket buffer size to " << size << ": " << stringerror(err) << endl;
- }
-}
-
-
-static void setSocketReceiveBuffer(int fd, uint32_t size)
-{
- setSocketBuffer(fd, SO_RCVBUF, size);
-}
-
-static void setSocketSendBuffer(int fd, uint32_t size)
-{
- setSocketBuffer(fd, SO_SNDBUF, size);
-}
-
-
// you can ask this class for a UDP socket to send a query from
// this socket is not yours, don't even think about deleting it
// but after you call 'returnSocket' on it, don't assume anything anymore
throw PDNSException("Binding TCP server socket for "+ st.host +": "+stringerror());
setNonBlocking(fd);
- setSocketSendBuffer(fd, 65000);
+ try {
+ setSocketSendBuffer(fd, 65000);
+ }
+ catch (const std::exception& e) {
+ g_log<<Logger::Error<<e.what()<<endl;
+ }
+
listen(fd, 128);
deferredAdds.emplace_back(fd, handleNewTCPQuestion);
tcpSockets.insert(fd);
setCloseOnExec(fd);
- setSocketReceiveBuffer(fd, 250000);
+ try {
+ setSocketReceiveBuffer(fd, 25000);
+ }
+ catch (const std::exception& e) {
+ g_log<<Logger::Error<<e.what()<<endl;
+ }
sin.sin4.sin_port = htons(st.port);