I'd previously run into this problem with mqtt_publish not being able to handle large payloads, larger than approximately 2k.
At the time, the suggested workaround was to patch mqtt_client_tls_write in mqtt_transport_socket_tls.c.
The patched version of the function looks like:
int mqtt_client_tls_write(struct mqtt_client *client, const u8_t *data,
u32_t datalen)
{
u32_t offset = 0U;
int ret;
while (offset < datalen) {
ret = send(client->transport.tls.sock, data + offset,
MIN(1024,(datalen - offset)), 0);
if (ret < 0) {
return -errno;
}
offset += ret;
}
return 0;
}
It looks like there's a new config option CONFIG_NRF91_SOCKET_SEND_SPLIT_LARGE_BLOCKS which might render this change unneeded.
However, there's also a change to mqtt_publish in mqtt.c, which now uses client_write_msg instead of client_write. I didn't dig all they way through it, but without CONFIG_NRF91_SOCKET_SEND_SPLIT_LARGE_BLOCKS set causes mqtt_publish to return -22. If you set CONFIG_NRF91_SOCKET_SEND_SPLIT_LARGE_BLOCKS then it appears to work, but never actually sends the data.
For time being, I've reverted the changes to mqtt_publish, but it would be better if mqtt_publish worked correctly.