mirror of
https://github.com/Kiritow/GSock.git
synced 2024-03-22 13:10:51 +08:00
Add Helper functions
This commit is contained in:
parent
fdea364bb8
commit
e106e769cf
87
gsock_helper.cpp
Normal file
87
gsock_helper.cpp
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
#include "gsock_helper.h"
|
||||||
|
|
||||||
|
sock_helper::sock_helper(sock& s) :_s(s)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int sock_helper::sendall(const void* ptr, int datasz, int& bytes_sent)
|
||||||
|
{
|
||||||
|
int done = 0;
|
||||||
|
while (done < datasz)
|
||||||
|
{
|
||||||
|
int ret = _s.send(((const char*)ptr) + done, datasz - done);
|
||||||
|
if (ret <= 0)
|
||||||
|
{
|
||||||
|
bytes_sent = done;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
done += ret;
|
||||||
|
}
|
||||||
|
bytes_sent = done;
|
||||||
|
return done;
|
||||||
|
}
|
||||||
|
|
||||||
|
int sock_helper::sendall(const void* ptr, int datasz)
|
||||||
|
{
|
||||||
|
int x;
|
||||||
|
return sendall(ptr, datasz, x);
|
||||||
|
}
|
||||||
|
|
||||||
|
int sock_helper::recvuntil(void* buff, int max_length,
|
||||||
|
const std::function<bool()>& cond_fn, int& bytes_recv)
|
||||||
|
{
|
||||||
|
int done = 0;
|
||||||
|
while (done < max_length)
|
||||||
|
{
|
||||||
|
int ret = _s.recv(((char*)buff) + done, max_length - done);
|
||||||
|
if (ret <= 0)
|
||||||
|
{
|
||||||
|
bytes_recv = done;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cond_fn())
|
||||||
|
{
|
||||||
|
return done;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bytes_recv = done;
|
||||||
|
return done;
|
||||||
|
}
|
||||||
|
|
||||||
|
int sock_helper::recvuntil(void* buff, int max_length,
|
||||||
|
const std::function<bool(void*, int)>& cond_fn, int& bytes_recv)
|
||||||
|
{
|
||||||
|
int done = 0;
|
||||||
|
while (done < max_length)
|
||||||
|
{
|
||||||
|
int ret = _s.recv(((char*)buff) + done, max_length - done);
|
||||||
|
if (ret <= 0)
|
||||||
|
{
|
||||||
|
bytes_recv = done;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cond_fn(buff, done))
|
||||||
|
{
|
||||||
|
return done;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bytes_recv = done;
|
||||||
|
return done;
|
||||||
|
}
|
||||||
|
|
||||||
|
int sock_helper::recvuntil(void* buff, int max_length,
|
||||||
|
const std::function<bool()>& cond_fn)
|
||||||
|
{
|
||||||
|
int x;
|
||||||
|
return recvuntil(buff, max_length, cond_fn, x);
|
||||||
|
}
|
||||||
|
|
||||||
|
int sock_helper::recvuntil(void* buff, int max_length,
|
||||||
|
const std::function<bool(void*, int)>& cond_fn)
|
||||||
|
{
|
||||||
|
int x;
|
||||||
|
return recvuntil(buff, max_length, cond_fn, x);
|
||||||
|
}
|
26
gsock_helper.h
Normal file
26
gsock_helper.h
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
/** General Socket Wrapper
|
||||||
|
* Created By Kiritow. (https://github.com/kiritow)
|
||||||
|
* Licensed under MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
// GSock Helper
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "gsock.h"
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
|
class sock_helper
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
sock_helper(sock&);
|
||||||
|
|
||||||
|
int sendall(const void* ptr, int datasz);
|
||||||
|
int sendall(const void* ptr, int datasz, int& bytes_sent);
|
||||||
|
|
||||||
|
int recvuntil(void* buff, int max_length, const std::function<bool()>& cond_fn);
|
||||||
|
int recvuntil(void* buff, int max_length, const std::function<bool()>& cond_fn, int& bytes_recv);
|
||||||
|
int recvuntil(void* buff, int max_length, const std::function<bool(void*, int)>& cond_fn);
|
||||||
|
int recvuntil(void* buff, int max_length, const std::function<bool(void*, int)>& cond_fn, int& bytes_recv);
|
||||||
|
private:
|
||||||
|
sock & _s;
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user