Skip to content

Commit d6d64d8

Browse files
committed
SocketWrapper: implement peek() and connected()
1 parent 6a6de68 commit d6d64d8

File tree

2 files changed

+21
-7
lines changed

2 files changed

+21
-7
lines changed

libraries/SocketWrapper/SocketWrapper.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class ZephyrSocketWrapper {
2222
hints.ai_family = AF_INET;
2323
hints.ai_socktype = SOCK_STREAM;
2424

25-
int resolve_attempts = 10;
25+
int resolve_attempts = 100;
2626
int ret;
2727

2828
while (resolve_attempts--) {
@@ -80,11 +80,11 @@ class ZephyrSocketWrapper {
8080
return count;
8181
}
8282

83-
int recv(uint8_t* buffer, size_t size) {
83+
int recv(uint8_t* buffer, size_t size, int flags = MSG_DONTWAIT) {
8484
if (sock_fd == -1) {
8585
return -1;
8686
}
87-
return ::recv(sock_fd, buffer, size, MSG_DONTWAIT);
87+
return ::recv(sock_fd, buffer, size, flags);
8888
}
8989

9090
int send(const uint8_t* buffer, size_t size) {

libraries/SocketWrapper/ZephyrClient.h

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,26 @@
44
#include "zephyr/sys/printk.h"
55

66
class ZephyrClient : public arduino::Client, ZephyrSocketWrapper {
7+
private:
8+
bool _connected = false;
9+
710
public:
811
int connect(const char* host, uint16_t port) override {
9-
return ZephyrSocketWrapper::connect((char*)host, port);
12+
auto ret = ZephyrSocketWrapper::connect((char*)host, port);
13+
if (ret) {
14+
_connected = true;
15+
}
16+
return ret;
1017
}
1118
int connect(IPAddress ip, uint16_t port) {
12-
return ZephyrSocketWrapper::connect(ip, port);
19+
auto ret = ZephyrSocketWrapper::connect(ip, port);
20+
if (ret) {
21+
_connected = true;
22+
}
23+
return ret;
1324
}
1425
uint8_t connected() override {
15-
return sock_fd != -1;
26+
return _connected;
1627
}
1728
int available() override {
1829
return ZephyrSocketWrapper::available();
@@ -46,10 +57,13 @@ class ZephyrClient : public arduino::Client, ZephyrSocketWrapper {
4657
// No-op
4758
}
4859
int peek() override {
49-
// No-op
60+
uint8_t c;
61+
recv(&c, 1, MSG_PEEK);
62+
return c;
5063
}
5164
void stop() override {
5265
ZephyrSocketWrapper::close();
66+
_connected = false;
5367
}
5468
operator bool() {
5569
return sock_fd != -1;

0 commit comments

Comments
 (0)